Сценарий:
for /F %%I IN ('dir /b /s *.zip *.rar') DO (
"C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" "%%I"
)
Объяснение:
for /F %%I IN ('dir /b /s *.zip *.rar') DO (
Это выполняет цикл для каждого файла, возвращаемого командой dir /b /s *.zip *.rar. /sГоворит dirв рекурсию подкаталогов и /bгравюры в голом формате.
Имя файла сохраняется в %%Iпеременной для последующего использования. Если вы набрали это в приглашении, вы бы использовали %Iвместо этого.
"C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" "%%I"
Это выполняет извлечение. Аргумент -o"%%~dpI"извлекает файл в тот же каталог, где находится архив. Другие опции:
-o"%%~dpI" - Извлекает в каталог, где находится архив.
-o"%%~dpnI"- Создает новый каталог в иерархии, названной в честь архива, и извлекает его (то есть AFolder\archive.zipизвлекает в AFolder\archive\).
-o"%%~nI"- Создает новый каталог в текущем каталоге с именем архива и извлекает его (то есть AFolder\archive.zipизвлекает в .\archive\).
Опустить -oаргумент - Извлекает в текущий каталог.
Пример:
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