Bu klasörün alt dizinlerindeki tüm arşivleri nasıl ayıklayabilirim?


18

Bir klasördeki alt dizinlerde bulunan birden çok arşivi nasıl çıkarırım ve sonuçları arşivlerin bulunduğu klasörlere geri veririm.

Yanıtlar:


22

Öncelikle 7-zip'i yükleyin .

batDizinin kökünde, içinde arşiv bulunan birçok alt dizin içeren bir dosya oluşturun . Ardından aşağıdakileri yapıştırın:

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
)

Yarasa başlatın ve tüm rar / fermuarlar içerdikleri klasöre çıkartılacaktır.

Bu nasıl çalışıyor?

("*") İÇİN / D / r %% F

Döngünün geçerli dizindeki tüm klasörlerde döngü yapması ve yolu bir değişkene koyması için %%F.

% pushd% CD

İçinde bulunduğumuz dizini belleğe koyun.

%% cd cd'si

Değişkendeki klasörü %%Fgeçerli dizin olarak ayarlayın .

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

Geçerli klasördeki tüm rarve zipdosyalar için şunları yapın:

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

Dosyalarda 7-zip çalıştırın. %%XBazı dosya adlarında boşluk olduğu için tırnak işaretleri gereklidir .

popd

Daha önce bellekte sakladığımız bir önceki dizine dönün.

Umarım bu birisi için yararlıdır.


3

Komut dosyasını Windows Vista'dan çalıştırırken sorun yaşadım. Kodu çalıştırdığımda hiçbir şey olmadı. Komut dosyasını çalıştırabilmek için yönetici olmam gerekiyordu. .Bat dosyasını sağ tıklayıp "yönetici olarak çalıştır" komutunu çalıştırdığımda, sistem32 klasöründe (doğru hatırlıyorsam) herhangi bir nedenle başladığı için çalışmadı. Bu sorunu çözmek için komut dosyasının çalıştırıldığı dizine geri dönmek üzere Windows Ortam değişkenini (burada açıklanmıştır: Windows Ortam Değişkenleri )% ~ dp0 kullanın.

@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 veya * .zip dosyalarının komut dosyasıyla aynı düzeyde olmadığından emin olun. Bir seviye aşağı olmalılar.

Umarım bu yorum birine yardımcı olmuştur.


Bu benim için iyi çalıştı. ": \ Program Files (x86) C" "C: \ Program Files" dan ben 64 bit Win 7 çalıştırıyorum gibi ben yolunu değiştirmek zorunda
repor

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

Geçerli dizinde özyinelemeli arama başlatır, .zip ile biten tüm dosyaları bulur, ardından bunu bir döngüye bağlar. Bulduğu her dosya için, çıktı dosyanın dizinine kaydırılmış olarak bir unzip komutu çalıştırır.


1

Ancak yukarıdaki yanıtlar çalışıyorsa Windows 64-bitve 7-Zip için 7-Zip 32-bitdoğru yol varsa C:\Program Files (x86)\7-Zip. Aşağıda benim için çalışan senaryo.

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

Bununla birlikte, 7zip'in 64 bit sürümüne sahipseniz, doğru yol: "C: \ Program Files \ 7-zip \ 7z.exe" özgün yanıtta belirtildiği gibidir.
Rohn Adams
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.