Extract all Zip's in a directory (incl. subfolders) with a .bat file or dos command
The Script:
for /F %%I IN ('dir /b /s *.zip *.rar') DO (
"C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" "%%I"
)
Explanation:
for /F %%I IN ('dir /b /s *.zip *.rar') DO (
This performs a loop for each file returned by the command dir /b /s *.zip *.rar
. The /s
tells dir
to recurse into subdirectories and /b
prints in bare format.
The filename is stored in the %%I
variable for use later. If you were typing this at the prompt, you would use %I
instead.
"C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" "%%I"
This performs the extraction. The argument -o"%%~dpI"
extracts the file into the same directory where the archive resides. Other options:
-o"%%~dpI"
— Extracts into the directory where the archive resides.-o"%%~dpnI"
— Creates a new directory in the hierarchy named after the archive and extracts there (that is,AFolder\archive.zip
extracts intoAFolder\archive\
).-o"%%~nI"
— Creates a new directory in the current directory named after the archive and extracts there (that is,AFolder\archive.zip
extracts into.\archive\
).Omit the
-o
argument — Extracts into the current directory.
Example:
C:\Temp>tree /F
Folder PATH listing
Volume serial number is 08A4-22E0
C:.
│ batch.bat
│
├───AFolder
│ a.zip
│
├───BFolder
│ b.zip
│
└───CFolder
c.zip
C:\Temp>batch.bat > nul
C:\Temp>tree /F
Folder PATH listing
Volume serial number is 08A4-22E0
C:.
│ batch.bat
│
├───AFolder
│ a.zip
│ a.zip.txt
│
├───BFolder
│ b.zip
│ b.zip.txt
│
└───CFolder
c.zip
c.zip.txt
This is an update of the accepted answer to support filenames with spaces ("DELIMS=") and skip overwrite (-aos). See links below and updated code. Thanks
Extract all Zip's in a directory (incl. subfolders) with a .bat file or dos command https://stackoverflow.com/questions/12487491/how-to-handle-space-of-filename-in-batch-for-loop http://7zip.bugaco.com/7zip/MANUAL/switches/overwrite.htm
for /F "DELIMS=" %%I IN ('dir /b /s *.zip *.rar') DO (
"H:\Program Files\7-Zip\7z.exe" x -aos -o"%%~dpI" "%%I"
)