Как извлечь несколько архивов, содержащихся в подкаталогах папки, и вывести результаты обратно в папки, в которых находятся архивы.
Во-первых, установите 7-молния.
Создать 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 / zip-архивы будут извлечены в папку, в которой они содержатся.
Как это работает?
FOR / D / r %% F in ("*") DO (
Для цикла, чтобы перебрать все папки в текущем каталоге и поместить путь в переменную
%%F
.
pushd% CD%
Поместите текущий каталог, в котором мы находимся, в память.
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, а затем направляет их в цикл. Для каждого найденного файла он запускает команду распаковки файла с выводом, перенаправленным в каталог файла.
Однако приведенные выше ответы работают, если вы используете 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
)