Как извлечь несколько архивов, содержащихся в подкаталогах в папке, с выводом результатов обратно в папки, в которых находятся архивы.
Как извлечь несколько архивов, содержащихся в подкаталогах в папке, с выводом результатов обратно в папки, в которых находятся архивы.
Ответы:
Во-первых, установите 7-zip .
Создайте bat
файл в корне каталога, содержащий много подкаталогов с архивами внутри. Затем вставьте следующее в:
FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
FOR %%X in (*.rar *.zip) DO (
"C:\Program Files\7-zip\7z.exe" x "%%X"
)
popd
)
Запустите летучую мышь, и все rar / zips будут извлечены в папку, в которой они содержатся.
Как это работает?
FOR / D / r %% F in ("*") DO (
Чтобы цикл зациклил все папки в текущем каталоге и поместил путь в переменную
%%F
.
pushd% CD%
Поместите текущий каталог, в котором мы находимся в памяти.
кд %% F
Установите папку из переменной
%%F
в качестве текущего каталога.
FOR %%X in (*.rar *.zip) DO (
Для всех
rar
иzip
файлов в текущей папке, сделайте следующее :
"C:\Program Files\7-zip\7z.exe" x "%%X"
Запустите 7-zip для файлов. Кавычки нужны,
%%X
потому что в некоторых именах файлов есть пробелы.
popd
Вернитесь в предыдущий каталог, который мы ранее сохранили в памяти.
Надеюсь, это кому-нибудь пригодится.
У меня были проблемы с запуском скрипта из Windows Vista. Когда я запустил код ничего не случилось. Мне нужно было быть администратором, чтобы иметь возможность запускать скрипт. Когда я щелкнул правой кнопкой мыши по файлу .bat и «запустил с правами администратора», он не сработал, потому что он по какой-то причине запустился в папке system32 (если я правильно помню). Чтобы решить эту проблему, просто используйте переменную среды Windows (объясняется здесь: переменные среды Windows )% ~ dp0, чтобы переключиться обратно в каталог, из которого был запущен скрипт.
@echo on
cd %~dp0
FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
FOR %%X in (*.rar *.zip) DO (
"C:\Program Files\7-zip\7z.exe" x %%X
)
popd
)
Убедитесь, что файлы * .rar или * .zip не находятся на том же уровне, что и скрипт. Они должны быть на один уровень ниже.
Надеюсь, этот комментарий кому-то помог.
find . -name "*.zip" | while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;
Запускает рекурсивный поиск в текущем каталоге, находит все файлы, оканчивающиеся на .zip, затем направляет их в цикл. Для каждого файла, который он находит, он запускает команду unzip для файла с выводом, перенаправленным в каталог файла.
Ответы выше работают, однако, если вы работаете Windows 64-bit
и 7-Zip 32-bit
, правильный путь C:\Program Files (x86)\7-Zip
для 7-Zip. Ниже приведен сценарий, который работал для меня.
@echo on
cd %~dp0
FOR /D /r %%F in ("*") DO ( pushd %CD% cd %%F
FOR %%X in (*.rar *.zip) DO (
"C:\Program Files (x86)\7-zip\7z.exe" x %%X
)
popd
)