Bu, Total Commander'ın dahili zip paketleyicisidir:
Ancak 7zip paketleyicimi kullanmak istiyorum. 5 dosya seçtiğimde, seçilen her dosya için 5 ayrı .zip arşivi alıyorum. 7zip'te bunu nasıl yaparım?
Bu, Total Commander'ın dahili zip paketleyicisidir:
Ancak 7zip paketleyicimi kullanmak istiyorum. 5 dosya seçtiğimde, seçilen her dosya için 5 ayrı .zip arşivi alıyorum. 7zip'te bunu nasıl yaparım?
Yanıtlar:
Grafik kullanıcı arabirimini kullanarak önerdiğiniz şeyi yapabileceğinizden emin değilim, ancak kesinlikle komut satırından yapabilirsiniz:
FOR %i IN (*.*) DO 7z.exe a "%~ni.7z" "%i"
İlk önce dizini ( cd
komutu), F:\Downloads
dizini veya toplu sıkıştırmayı yapmak istediğiniz dizini değiştirmeniz gerekir . Ayrıca, * .exe veya yalnızca bu belgeleri sıkıştırmak için filtrelemek istediğiniz uzantıyı değiştirmek oldukça kolaydır.
Ve gizli kod çözücü halkası:
%i
döngüdeki her adım için dosya adını tutan bir değişkendir.(*.*)
seçim kriteri, kolayca * .exe veya benzeri olabilir7z.exe
7-Zip'in komut satırı versiyonu%~ni
- bu,% i değişkenini sadece dosya adına genişletir - uzantı yokYalnızca belirli bir dizinin klasörlerini eklemek istiyorsanız, komut varsayılan olarak FOR sadece dosyalarla çalıştığından biraz daha karmaşıktır. Bazı ek bilgileri beslememiz gerekiyor:
FOR /F "usebackq delims=?" %i IN (`DIR /B /A:D`) DO 7z.exe a "%i.7z" "%i"
Bu sihir gibi görünen birkaç parça nedeniyle işe yarıyor:
/F
FOR () 'daki genişletilmiş değerin üzerinden yineleme yapmasını söylerusebackq
FOR komutunu geçeceğimi ve çıktıları yinelemek için kullanacağımı söylerdelims=?
FOR için ?
, dosya adlarında ve dizinlerde yasadışı bir karakter olan - jetonları parçalamak istediğimi söyler . Sadece bir jeton istiyorum./B
İçinde DIR
içindir çıplak formatta sadece adı -/A:D
İçinde DIR
özelliğine göre sonuçlar sınırlamak için, D dizinleri içindirBunu bir toplu iş dosyasının içine yerleştirmek istiyorsanız, yapmanız gereken tek değişiklik% i değişkenini iki katına çıkarmaktır:
FOR %%i IN (*.*) DO 7z.exe a "%%~ni.7z" "%%i"
Goyuix'in cevabını beğendim. Ancak, Windows 7 kullanıyorsanız (ya da Power Shell kurulu ise) ve ayrıca 7-zip, 7za.exe komut satırı sürümünü kullanıyorsanız, şu komutu çalıştırabilirsiniz:
dir | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }
Yalnızca çalıştırılabilir dosyaları seçmek için "dir" dosyasını "dir * .exe" olarak da değiştirebilirsiniz.
Power Shell ile ilgili güzel bir şey, dizeleri yerine nesnelerle çalışıyor olmasıdır. Yani istersen çok netleşebilirsin. Örneğin:
dir *.csv | ? { $_.Length -lt 18900 -and $_.LastWriteTime -ge [DateTime] "07/01/2011" } | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }
Bu sadece şunları içeren dosyaları içerecektir:
EDIT 7-zip dosyaları yerine zip dosyalarını istiyorsanız, bunun yerine InfoZip's zip.exe dosyasını kullanın.
7z a -tzip archive.zip *.exe
Total Commander için 7zip eklentisini http://www.ghisler.com/plugins.htm adresinden indirip yükleyebilirsiniz . Pencerenizin sağ tarafında ekran resminizden, 7zip sıkıştırma için başka bir seçim olacaktır. Bu seçenekle tam olarak ne istediğinizi başarabilirsiniz.
Tam olarak bu problem üzerinde çalışıyorum ve bulduğum sorunlardan biri arşiv içindeki klasör adının çoğaltılmasıydı, yani "foo" adlı bir klasörü sıkıştırırken .\foo\fighters.txt
yalnızca bir tane içeren bir arşiv üretiliyordu fighters.txt
.
Bu nedenle cevap, işlenmekte olan dizine girerek arşivin önceki (kök) dizinde görünmesini sağlamak ve ardından bir sonraki klasörü işlemek için o dizine geri dönmektir.
Ayrıca, 7ZIP'in arşiv içerisinde, dolayısıyla -x!*.zip
ve -x!*.cmd
dışlama argümanlarında bitmelerini önlemek için kök dizindeki mevcut ZIP ve CMD dosyalarını görmezden gelmesi de önemlidir .
Bu komut dosyası da özyinelemeli klasör yapıları koruyacaktır.
@echo off
REM Ensures variables set within the batch file are local to
REM this script only and will be removed when finished.
setlocal
if exist *.zip goto zip_exist
for /d %%X in (*) do (
cls
cd /D %%X
"e:\Program Files\7-Zip\7z.exe" a -r -x!*.zip -x!*.cmd "..\%%X.zip" "*.*"
cd ..
)
goto end
:zip_exist
Echo.
Echo Note: for this script to work, compression of
Echo pre-existing zip files is not possible.
:end
pause
Yukarıdaki kod, "compress_dirs.cmd" gibi bir toplu iş dosyasına kopyalanmalı ve sıkıştırmak istediğiniz klasörleri içeren dizinden admin olarak çalıştırılmalıdır.
Bu yardımcı olur umarım.
Klasör yapısını korumanız ve her dosyayı kendi yapısına kaydetmeniz gerekirse, şunu deneyin:
Bu komutu .bat uzantılı bir dosyaya kaydedin ve sıkıştırmanız gereken klasöre yerleştirin:
FOR /R %%i IN (*.*) DO "C:\Program Files\7-Zip\7z.exe" a "%%i.7z" "%%i" -sdel
Not:
-sdel: Orijinal dosyayı siler (yalnızca sıkıştırılmış dosyayı saklamak istiyorsanız isteğe bağlı)