How to make 7-zip do a whole bunch of folders

Run from a command prompt whose working directory is your My Pictures directory, this command will create a zip file of the contents of each subdirectory, leaving all of the zip files in your My Pictures directory.

Edit: I have added the quotation marks necessary to allow for directories with spaces in their names.

for /D %%d in (*.*) do 7z a -tzip "%%d.zip" "%%d"

Also: The following version will not put files in a subdirectory inside of the zip file, but instead in its root:

for /D %%d in (*.*) do 7z a -tzip "%%d.zip" ".\%%d\*"

In Windows 7 and above

for /D %d in (*.*) do 7z a -tzip "%d.zip" "%d"

or

for /D %d in (*.*) do 7z a -tzip "%d.zip" ".\%d\*"

I couldn't get the command line to work, instead I downloaded WinRAR and mtone was right - WinRAR does have an option to zip multiple folders into their own separate ZIP files.

E.g. C:\Files\Fables 01 into C:\Files\Fables 01.zip, and C:\Files\Fables 02 into C:\Files\Fables 02.zip.

With WinRAR, open the Folder that contains the folders you want to zip, then follow these steps:

  • Select all folders you want zipped/rared
  • Click "ADD" or Alt+A or Commands -> "Add files to Archive"
  • Select RAR or ZIP
  • go to "Files" tab
  • Check "Put each file to separate archive" under the Archives box

When you've got any other settings you like fixed, hit OK and boom: multiple ZIP files of multiple folders. This worked so much easier than command line 7zip.


Just a slight update of eleven81's answer: The code below creates a batch file which multiple items can be dropped onto.

@echo off
if [%1]==[] goto :eof
:loop
7z a -tzip "%~1.zip" "%~1"
shift
if not [%1]==[] goto loop

This batch file can then be added to the context menu via the registry:

  1. create a new key under [HKEY_CLASSES_ROOT\Folder\shell], call it cmd1
  2. Edit the string value and call it 'Batch Zip'
  3. create another new key under this one and call it command
  4. Change the value of this to your path, with double escaped slashes

So for example, my entry is "C:\Users\Rory\Dropbox\_apps\batch_zip.bat" "%1"

Once you do this you'll have an entry in your context menu for 'Batch Zip' which will batch zip any selected folders into separate archives

However, if you do this via the context menu, it will unfortunately run all operations simultaneously, and as anyone who's done a lot of zipping and unzipping will know, zipping folders works a lot faster one after the other than all at once.

If anyone knows a way to fix this in the registry please do tell.

Dragging the selected folders onto the batch will do them one after the other.

Tags:

Batch

7 Zip