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.
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:
Ö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
rarvezipdosyalar 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 .
popdDaha önce bellekte sakladığımız bir önceki dizine dönün.
Umarım bu birisi için yararlıdır.
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.
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.
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
)