Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I have a bunch of files like this:

C:\G\G1\35antique-shop.mp3
C:\G\G2\35antique-shop.mp3
C:\G\G1\09saguri.mp3
C:\G\G2\09saguri.mp3

edit1: I just wanna know how to KEEP folder structure while archiving, this is more important than the duplicate thing, to know how to solve that, would be a bonus.

edit2 I have explained myself poorly in previous comments etc. @Lamb "Do you want to archive only selective files (not the whole folder content) from the G1 and G2 folders ?"

That almost says it all, but I'll try to improve: Not only do i want to MOVE only some selected files to an archive, I also have a LIST of these files, including path-names to each file.

So, in SubDir1 there might be 10 files, of which I want to zip 3, and in SubDir1\sub2 there might be 5 files, of which I want to zip all 5. The files that I need to archive are in a listfile.

There might be duplicate files, so my hope is that with subdirectories added, 7-zip does NOT see them as duplicates.

And I like to do it on the commandline.

I've tried a batch file like this:

7z a -r MyArchive.7z C:\G\G1\35antique-shop.mp3
7z a -r MyArchive.7z C:\G\G2\35antique-shop.mp3
7z a -r MyArchive.7z C:\G\G1\09saguri.mp3
7z a -r MyArchive.7z C:\G\G2\09saguri.mp3

This also means that files 01antique-shop.mp3, 02antique-shop.mp3, ...., til 33antique-shop.mp3 and 34antique-shop.mp3, should NOT be archived.

The foldernames (=subdirectories) weren't added to MyArchive.7z, and this is the problem.

Obviously, I'd like to use just one commando with a listfile, but that doesn't work either.

I've tried: 7z a -mx0 -tzip C:\$$-edrive\F-G-H.zip @fgh.txt which actually works pretty fine as far as the selecting goes, but does NOT keep the directory structure. Sadly.

Please tell me how to do this.

share|improve this question
    
Do you want to archive only selective files (not the whole folder content) from the G1 and G2 folders ? –  Lamb Feb 2 '13 at 16:45
add comment

4 Answers

I got it to archive a directory with subdirectories using the following:

7z.exe a - t7z NewArchivePath PathOfFolderToArchive
share|improve this answer
    
I can't find a direct link to the 7zA.exe anywhere (as per your link), is it obsolete and replaced by 7z.exe? –  PrincessPooleRulz Feb 2 '13 at 18:26
    
@user194767: 7za.exe is the command-line version. –  Karan Feb 2 '13 at 19:50
    
and, I'd like to use it, but I can't find a like to it on that page, 7-zip.org/download.html. So, just to be clear: with "can't find a direct link to the 7zA.exe anywhere" I really meant: "Please give me a direct link to this free software!" Thank you! –  PrincessPooleRulz Feb 2 '13 at 20:34
    
@user194767: Ok, here's the current version, but are you telling me you couldn't spot 7-Zip Command Line Version anywhere on that page?! –  Karan Feb 2 '13 at 20:51
    
I couldn't 7zA.exe so tried using 7z.exe and it worked. I'm not sure what the -r flag is used for but it is not needed to archive subdirectories. –  Eric Roper Feb 2 '13 at 21:55
show 1 more comment

Try this instead:

cd /d C:\
7z a MyArchive.7z G\G1\35antique-shop.mp3
7z a MyArchive.7z G\G2\35antique-shop.mp3
7z a MyArchive.7z G\G1\09saguri.mp3
7z a MyArchive.7z G\G2\09saguri.mp3

The problem seems to be that people have been requesting for years for proper path storage options (just as they have for the ability to modify multi-volume archives), but the author doesn't seem to be interested. That's part of the reason why I started using WinRAR so much.


If you have a listfile, 7-Zip will not store paths if the files to be archived do not share a single top-level directory. For example if you have Input.txt containing the following:

C:\path to\file1.ext
D:\path to\file1.ext
E:\path to\file1.ext

If you run 7z a MyArchive.7z @Input.txt, you'll see that the paths have been stripped completely, which seems completely backwards to me (OTOH rar a MyArchive.rar @Input.txt does the job just fine).

So to overcome 7-Zip's deficiency, you can use a batch file as follows:

for /f "tokens=1* delims=\" %%i in (Input.txt) do (
    pushd %%i\
    7z a D:\MyArchive.7z "%%j"
    popd
)

Note: Replace D:\MyArchive.7z with the proper path to your destination archive. Also, the batch file should work irrespective of whether you have quoted paths in your listfile or not.


Edit: If your listfile looks like:

"C:\$$-edrive\F\faithless.-.long.way.mp3"
"C:\$$-edrive\G\Antique Shop.mp3"

or

"\$$-edrive\F\faithless.-.long.way.mp3"
"\$$-edrive\G\Antique Shop.mp3"

then edit it to look like this instead:

"$$-edrive\F\faithless.-.long.way.mp3"
"$$-edrive\G\Antique Shop.mp3"

Now assuming all files to be archived are under C:\$$-edrive, navigate to C:\ and run 7z a C:\MyArchive.7z @C:\Input.txt. Using a listfile the paths will be saved only if no drive letters are present, no initial backslashes are there and if the top-level (root) directory is the same for all files. Also, for best results I advise you not to create MyArchive.7z in C:\$$-edrive.

share|improve this answer
    
Well, the answer was 3/4 ok. RAR worked super,but batch file worked soso. Here's the output, and it only added ONE file to my archive, the one without spaces in the filename___ C:\Programs\zippers\7-Zip>( pushd "C:\ c:\Programs\zippers\7-Zip\7z.exe a c:\$$-edrive\FGH.7z "$$-edrive\G\gattaca_7mp 3_zefen\gattaca - 03 the one moment.mp3" " popd ) 7-Zip 4.65 Copyright (c) 1999-2009 Igor Pavlov 2009 Scanning Updating archive c:\$$-edrive\FGH.7z Error: Can not open file FGH.7z.tmp Access denied. System error: undefined error===== Most important is perhaps the access denied error? –  PrincessPooleRulz Feb 3 '13 at 2:04
    
Can you add a few sample lines (with spaces and without) from your actual listfile to your question above? –  Karan Feb 3 '13 at 2:14
    
okay, so I replaced all the spaces with dots in the filenames, but not in the pathnames, which I will try now. output is still: C:\Programs\zippers\7-Zip>(______ pushd c:_______ c:\Programs\zippers\7-Zip\7z.exe a c:\$$-edrive\FGH.7z "$$-edrive\F\filmmusic_14mp3_foretean\starcraft.-.starcraft.vs.south.park.mp3"_______ popd________ )________ Scanning Updating archive c:\$$-edrive\FGH.7z Error: Can not open file FGH.7z.tmp Access denied. System error: undefined error –  PrincessPooleRulz Feb 3 '13 at 2:28
    
"I replaced all the spaces with dots in the filenames" - Meaning you renamed the actual files, or just edited the listfile? Spaces in both filenames and paths should be fine, see my edit above (i.e. from your listfile remove C:\ and place quotes around all paths). Now you should be able to use 7z directly instead of my batch file workaround. –  Karan Feb 3 '13 at 2:34
    
1. I renamed both = = = = = = 2. I've made your changes, but it still doesn't work with 7z = = = = = =3. $$-edrive\ is indeed the only top directory. = = = = = 4. Error messages = = = = = WARNINGS for files: = = = = = $$-edrive : The system can't find that file. = = = = = = = = = = "$$-edrive : The system can't find that file. = = = = = = = = = = WARNING: Cannot find 2 files = = = = = C:\Programs\zippers\7-Zip> = = = = = note that there are two warnings, and the second one starts with one double quote... Odd? –  PrincessPooleRulz Feb 3 '13 at 2:51
show 9 more comments

7-Zip will see them as duplicates regardless, and skip them. If there's any way to get around that, I've never found it - I always just break the job up into several archives.

share|improve this answer
    
do you know how to KEEP the folder structure while zipping files INTO an archive? They say that's the default, but it's NOT. –  PrincessPooleRulz Feb 2 '13 at 10:01
    
@user194767 - I use a command line like this: %ZDIR%\7z a -t7z -r -mx=1 %ZIP%\mydocu "c:\My Documents\*.*" -wc:\temp where ZDIR is the path to 7-Zip and ZIP is the destination drive. –  MT_Head Feb 2 '13 at 18:12
add comment

Not sure how to help with duplicates. However, I think a more convenient system than a batch with a full command per would be to create a listfile.txt:

 C:\G\G1\35antique-shop.mp3
 C:\G\G2\35antique-shop.mp3
 MyArchive.7z C:\G\G1\09saguri.mp3
 MyArchive.7z C:\G\G2\09saguri.mp3

And then compress them all with 7z a -r -tzip archive.zip @listfile.txt

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.