Як витягти декілька архівів, що містяться у підкаталогах у папці, виводячи результати назад у папки, де є архіви.
Як витягти декілька архівів, що містяться у підкаталогах у папці, виводячи результати назад у папки, де є архіви.
Відповіді:
По-перше, встановіть 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
)
Запустіть биту, і всі рари / блискавки будуть вилучені в папку, в якій вони містяться.
Як це працює?
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, а потім передає їх у цикл. Для кожного файлу, який він знайде, він виконує команду 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
)