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