Як я витягую всі архіви у підкаталогах цієї папки?


18

Як витягти декілька архівів, що містяться у підкаталогах у папці, виводячи результати назад у папки, де є архіви.

Відповіді:


22

По-перше, встановіть 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

Поверніться до попереднього каталогу, який ми раніше зберігали в пам'яті.

Сподіваюся, це комусь корисно.


3

У мене виникли проблеми із запуском сценарію з 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 не знаходяться на рівні з сценарієм. Вони повинні бути на один рівень вниз.

Я сподіваюся, що цей коментар комусь допоміг.


Це добре працювало для мене. Мені довелося змінити шлях на "C: \ Program Files (x86)" з "C: \ Program Files", оскільки я працюю на 64-розрядному Win 7.
Контанго

1
find . -name "*.zip" |  while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;

Починає рекурсивний пошук у поточному каталозі, знаходить усі файли, що закінчуються у .zip, а потім передає їх у цикл. Для кожного файлу, який він знайде, він виконує команду unzip для файлу з вихідним сигналом, що передається в каталог файлу.


1

Відповіді вище працюють, однак, якщо ви працюєте 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
)

Якщо у вас 64-бітна версія 7zip, правильний шлях: "C: \ Program Files \ 7-zip \ 7z.exe", як зазначено в оригінальній відповіді.
Рона Адамса
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.