Сценарий:
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