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 .
bat
Dizinin 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ü
%%F
geçerli dizin olarak ayarlayın .
FOR %%X in (*.rar *.zip) DO (
Geçerli klasördeki tüm
rar
vezip
dosyalar için şunları yapın:
"C:\Program Files\7-zip\7z.exe" x "%%X"
Dosyalarda 7-zip çalıştırın.
%%X
Bazı 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.
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-bit
ve 7-Zip için 7-Zip 32-bit
doğ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
)