Question

I know how to archive files or to extract with 7zip (in Windows). I know that WinRAR tools can archive files from another archives. Something like

    winrar -a dest_archive.rar origin_archive.zip/toto.txt

This seems not possible with 7z. Currently here is what i'm trying

    "C:\Program Files\7-Zip\7z" a "toto.zip" tata.7z\tata.txt

I know i could extract the whole archive (with 'e' option) then archive the file i want but this extract operation is one too many.

Was it helpful?

Solution

7-zip doesn't provide this functionality. You'd have to do it yourself. Here's a quick demo. The relative file path (in the source .7z) is the first argument. The other args are the 7-Zip archives (source, then dest).

SETLOCAL 

SET "FILE_TO_MOVE=%~1"
SET "SOURCE_ARCHIVE=%~2"
SET "TARGET_ARCHIVE=%~3"

ECHO File: %FILE_TO_MOVE%
ECHO Source: %SOURCE_ARCHIVE%
ECHO Target: %TARGET_ARCHIVE%

SET "TEMP_DIR=%TEMP%\7z_temp_%RANDOM%"
IF EXIST "%TEMP_DIR%" RMDIR /S /Q "%TEMP_DIR%"
MKDIR "%TEMP_DIR%"

@ECHO Before copy...
7z.exe l "%TARGET_ARCHIVE%

7z.exe x -o"%TEMP_DIR%" "%SOURCE_ARCHIVE%" "%FILE_TO_MOVE%"
pushd "%TEMP_DIR%"
7z.exe a "%TARGET_ARCHIVE%" "%FILE_TO_MOVE%"
popd
RMDIR /S /Q "%TEMP_DIR%"

@ECHO After copy...
7z.exe l "%TARGET_ARCHIVE%

One quirk about this solution is that the target will probably need to be a fully qualified path (because you're changing to a different directory before referring to it). Since I don't know precisely how you intend to perform this operation, I can't propose a better solution that specifying an absolute path.

OTHER TIPS

The closest you can get into the concept exposed is

7z e -so tata.7z tata.txt | 7z a -sitata.txt toto.7z

This will extract tata.txt from source file, send output to stdout, and recompress into target file reading from stdin.

BUT file needs to be decompressed/recompressed.

AND it seems that .zip interface is not compatible with this kind of operation. 7z, bzip2, gzip work without problems.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top