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 into AFolder\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