Jak wyodrębnić wszystkie archiwa z podkatalogów tego folderu?

18

Jak wyodrębnić wiele archiwów zawartych w podkatalogach w folderze, wyprowadzając wyniki z powrotem do folderów, w których znajdują się archiwa.

Beznadziejny
źródło

Odpowiedzi:

22

Najpierw zainstaluj 7-zip .

Utwórz batplik w katalogu głównym katalogu zawierającego wiele podkatalogów z archiwami w środku. Następnie wklej następujące elementy:

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
)

Uruchom nietoperza, a wszystkie pliki rar / zamki zostaną rozpakowane do folderu, w którym się znajdują.

Jak to działa?

FOR / D / r %% F w („*”) DO (

Aby pętla przechodziła przez wszystkie foldery w bieżącym katalogu i wstawiała ścieżkę do zmiennej %%F.

pushd% CD%

Umieść bieżący katalog, w którym się znajdujemy, w pamięci.

cd %% F

Ustaw folder ze zmiennej %%Fjako bieżący katalog.

FOR %%X in (*.rar *.zip) DO (

Dla wszystkich plików rari zipw bieżącym folderze wykonaj:

"C:\Program Files\7-zip\7z.exe" x "%%X"

Uruchom 7-zip na plikach. Cytaty są potrzebne, %%Xponieważ niektóre nazwy plików mają spacje.

popd

Wróć do poprzedniego katalogu, który wcześniej zapisaliśmy w pamięci.

Mam nadzieję, że jest to przydatne dla kogoś.

anon
źródło
3

Miałem problem z uruchomieniem skryptu z systemu Windows Vista. Kiedy uruchomiłem kod, nic się nie działo. Musiałem być administratorem, aby móc uruchomić skrypt. Kiedy kliknąłem prawym przyciskiem myszy plik .bat i „uruchomiłem jako administrator”, nie działało, ponieważ z jakiegoś powodu uruchomiono go w folderze system32 (jeśli dobrze pamiętam). Aby rozwiązać ten problem, po prostu użyj zmiennej środowiskowej systemu Windows (wyjaśnione tutaj: Zmienne środowiskowe systemu Windows )% ~ dp0, aby wrócić do katalogu, z którego skrypt został uruchomiony.

@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
)

Upewnij się, że żadne pliki * .rar lub * .zip nie znajdują się na tym samym poziomie co skrypt. Powinny być o jeden poziom niżej.

Mam nadzieję, że ten komentarz komuś pomógł.

Daniel Daniel
źródło
To działało dobrze dla mnie. Musiałem zmienić ścieżkę do „C: \ Program Files (x86)” z „C: \ Program Files”, ponieważ korzystam z 64-bitowego Win 7.
Contango
1
find . -name "*.zip" |  while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;

Rozpoczyna wyszukiwanie rekurencyjne w bieżącym katalogu, znajduje wszystkie pliki z rozszerzeniem .zip, a następnie przesyła je do pętli. Dla każdego znalezionego pliku uruchamia polecenie rozpakuj plik, a dane wyjściowe przetaczane są do katalogu pliku.

Curtis Tasker
źródło
1

Powyższe odpowiedzi działają jednak, jeśli używasz Windows 64-biti 7-Zip 32-bitpoprawna ścieżka jest C:\Program Files (x86)\7-Zipdla 7-Zip. Poniżej znajduje się skrypt, który zadziałał dla mnie.

@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
)
Ryan
źródło
Jeśli masz 64-bitową wersję 7zip, poprawna ścieżka to: „C: \ Program Files \ 7-zip \ 7z.exe”, jak podano w oryginalnej odpowiedzi.
Rohn Adams,