7-zip nasıl bir sürü klasör yapmak


18

800x600 piksele kesmek zorunda kaldığım bir sürü fotoğrafım var. Bu kolayca yapıldı, ama şimdi onları yüklemeliyim ki aile hepsini görebilsin.

Şey, bu resimlerde 500MB. Her biri neredeyse eşit miktarda resim içeren ayrı klasörleri sıkıştırmaya karar verdim. Bu şekilde her gün bir çift yükleyebilirim. Bunu manuel olarak yapmak çok uzun ve zor bir iştir. Her klasör ayrı ayrı 7-zip işlemek için bir yol olup olmadığını merak ediyorum?

Bunu yapmak için bir toplu iş dosyasına ihtiyacım olacağını düşünüyorum, ama bununla iyi değilim. Her şeyi tek bir klasöre koydum. Çeşitli alt klasörlerde resimlerin bulunduğu yer. İhtiyacım olan bu klasörün içindekilerin sıkıştırılması. Klasörü onunla birlikte sıkıştırıp sıkıştırmayacağımdan emin değilim. PHP'nin bir zip modülü olduğunu biliyorum, sadece onunla hiç çalışmadım, bu yüzden zip içeriğinin sadece öğeler yerine öğeleri içeren bir klasör olduğu gerçeğini işleyip işlemediğinden emin değilim.


1
Kaç klasörden bahsediyorsun? 7? 147? Toplu iş dosyalarında iyi değilseniz, ancak belki de bu zorluğun üstesinden gelmek için iyi bir fırsattır. :)
JMD

105 klasör toplamı
KdgDev

Yanıtlar:


25

Çalışma dizini dizininiz olan bir komut isteminden çalıştırıldığında My Pictures, bu komut her bir alt dizinin içeriğinin bir zip dosyasını oluşturur ve tüm zip dosyalarını My Picturesdizininizde bırakır .

Düzenleme: Adlarında boşluk olan dizinlere izin vermek için gerekli tırnak işaretleri ekledim.

for /D %%d in (*.*) do 7z a -tzip "%%d.zip" "%%d"

Ayrıca: Aşağıdaki sürüm, dosyaları zip dosyasının içindeki bir alt dizine değil, kök dizinine yerleştirir:

for /D %%d in (*.*) do 7z a -tzip "%%d.zip" ".\%%d\*"

Windows 7 ve sonraki sürümlerde

for /D %d in (*.*) do 7z a -tzip "%d.zip" "%d"

veya

for /D %d in (*.*) do 7z a -tzip "%d.zip" ".\%d\*"

Sınıf yoluma 7-zip klasörü eklemeyi denedim, ama işe yaramaz. Ben sadece 7z yerine çalıştırılabilir bulmak için tüm dize kullanırsanız, işe yarıyor. Bu dize sınıf yoluna ekleyerek aynı etkiye sahip olsa da?
KdgDev

classpathJava sınıfları ve kütüphaneler arar yerdir. google.com/search?q=classpath Görünüşe göre pathkabuğun yürütülebilir dosyaları nerede arayacağı ile karıştırdınız .
eleven81

Soru: komut dosyası çalışıyor, ancak klasör adında boşluk olduğunda değil ...
KdgDev

Güncelleme için teşekkürler. İkinci komut dosyasıyla, zip içeriğinin "düzleştirileceği" anlamına mı geliyorsunuz?
KdgDev

6
Ben değiştirmek zorunda etse de, bu benim için çok çalıştı %%detmek %dbenim Win 7 kutu var adı çok uzun olmak hatası "%% d bu kez de beklenmedik oldu" atma şikayet olarak.
Benjam

7

Komut satırını çalıştıramadım, bunun yerine WinRAR'ı indirdim ve mtone haklıydı - WinRAR'ın kendi ayrı ZIP dosyalarına birden fazla klasörü zipleme seçeneği var.

Örneğin, C:\Files\Fables 01içine C:\Files\Fables 01.zipve C:\Files\Fables 02içine C:\Files\Fables 02.zip.

WinRAR ile, sıkıştırmak istediğiniz klasörleri içeren Klasörü açın, ardından şu adımları izleyin:

  • Sıkıştırılmasını / paylaşılmasını istediğiniz tüm klasörleri seçin
  • "EKLE" veya Alt+ Aveya Komutlar -> "Arşive Dosya Ekle" yi tıklayın
  • RAR veya ZIP seçin
  • "Dosyalar" sekmesine git
  • Arşivler kutusunun altındaki "Her bir dosyayı ayrı bir arşive koy" seçeneğini işaretleyin

Sevdiğiniz diğer ayarlarınız varsa, Tamam'a basın ve patlama: birden çok klasörün birden fazla ZIP dosyası. Bu, komut satırı 7zip'ten çok daha kolay çalıştı.


"Her dosya" yazmasına rağmen bu onay kutusu klasörlerle de çalışır.
dhaupin

1
Burada önerilen tüm çözümler arasında bu 2018'de benim için en iyi çalıştı. Sadece arşivin .zip olmasını istediğinizi kontrol edin, yoksa bunun yerine bir grup .rar dosyası oluşturacaktır.
Eric Hepperle - CodeSlayer2010

5

Eleven81'in cevabının sadece küçük bir güncellemesi: Aşağıdaki kod, birden fazla öğenin atılabileceği bir toplu iş dosyası oluşturur.

@echo off
if [%1]==[] goto :eof
:loop
7z a -tzip "%~1.zip" "%~1"
shift
if not [%1]==[] goto loop

Bu toplu iş dosyası daha sonra kayıt defteri aracılığıyla içerik menüsüne eklenebilir:

  1. [HKEY_CLASSES_ROOT \ Folder \ shell] altında yeni bir anahtar oluşturun, cmd1 deyin
  2. Dize değerini düzenleyin ve buna 'Toplu Zip' deyin
  3. bunun altında yeni bir anahtar oluşturun ve komut olarak adlandırın
  4. Bunun değerini çift çıkış karakterli eğik çizgilerle yolunuza değiştirin

Örneğin, girişim "C: \ Users \ Rory \ Dropbox \ _apps \ batch_zip.bat" "% 1"

Bunu yaptıktan sonra, bağlam menünüzde 'Toplu Zip' için seçilen klasörleri ayrı arşivlere toplu olarak işleyecek bir girişiniz olacak

Ancak, bunu bağlam menüsü aracılığıyla yaparsanız, maalesef tüm işlemleri aynı anda çalıştıracaktır ve çok sayıda sıkıştırma ve açma işlemi yapan herkesin bileceği gibi, zipleme klasörleri birbiri ardına çok daha hızlı çalışır.

Herkes bunu kayıt defterinde düzeltmek için bir yol biliyorsa lütfen söyleyin.

Seçilen klasörleri toplu iş üzerine sürüklemek, bunları art arda yapar.


1
7z exe benim yolumda değildi ve bu yüzden senaryonuzu biraz düzenlemek zorunda kaldım. "C: \ Program Dosyaları (x86) \ 7-Zip \ 7z.exe" a -tzip "% ~ 1.zip" "% ~ 1"
Ryan

1
Sürükle ve bırak lol ile tembelliği teşvik etmek için +1. Ben sadece değiştirilmiş bir versiyonunu gönderdim @ http://superuser.com/a/1160047/678687
Enteleform

3

İpucu: Resimleriniz JPG ise, zaten sıkıştırılmıştır. 7-Zip'i sıkıştırma olmadan 'arşiv' modunda kullanın (sıkıştırma düzeyi: depola) bu işlemi çok hızlandıracaktır.

Ultra sıkıştırma kullansanız bile, neredeyse% 5 kazanamazsınız, kesinlikle çabaya değmez.

Pratik olarak ekler eklemeyi düşünüyordum.

onları e-posta eki olarak göndermezdim. yerine tek tıklama barındırma sunucusuna (ör. drop.io, rs, mu, ms, vb., seçenekler bol) yükleyin ve ardından indirme bağlantısını e-posta yoluyla arkadaşlarınıza ve ailenize gönderin.


2
Ancak, postalamak daha kolay olacak.
Kale

475 veya 500 MB yüklemede çok fazla fark olduğunu düşünmüyorum, kesinlikle 'Ultra' ile bir

Pratik olarak ekler eklemeyi düşünüyordum. Bir dosyayı 10 yerine ek olarak eklemek daha kolaydır (dosya sayısı arttığında can sıkıcı olur).
Kale

Bu yüzden Molly "arşiv" modunu önerdi; zaten sıkıştırılmış bir şeyi sıkıştırmaya çalışırken zaman kaybetmeden hepsini tek bir dosyaya
doldurur

Son cümlesine tekrar başvurduğum doğrudur, ancak yine de, jpeg dosyalarının boyutunda küçük bir azalma olsa bile (ve bazen aslında çok küçük değildir), buna değer. Sıkıştırma için harcanan zaman, diyelim ki, gmail veya diğer bazı postaları yüklemek için harcanan zamandan çok daha azdır (nispeten büyük bir ek boyutu ödeneği olan gmail).
Kale

2

Roryok'un cevabını çok yardımcı buldum , hızlı, otomatik arşivleme için dosyalara izin veren bir batch scriptfor sağladı .Windowsdrag-&-drop


Bu komut dosyasını kullanmak için bir .batuzantıyla kaydedin ve ardından dosyaları ve / veya klasörleri toplu iş dosyasına ( veya toplu iş dosyasının kısayoluna ) sürükleyip bırakabilirsiniz .

.zipdosyalar kaynak dosyalarla aynı dizinde oluşturulur.
( her ne kadar hedef @ betiğinde değiştirilebilirarchivePath )


Özelleştirme kolaylığını ve genel işlevselliği artırmak için yaptığım bazı güncellemeler:

  • adlandırılmış değişkenler eklendi
  • forverilen bağımsız değişkenlerle yinelenen bir döngü uyguladı
    ( çalışma zamanı değişkenlerine izin vermekle birliktedelayedexpansion )
  • ilave ifkoşullar ayırt etmek filesvefolders
    • bu, üst klasörün arşiv içine alınması yerine klasör içeriğinin doğrudan arşive eklenmesine izin verir
      ( EG:   \archive.zip\file.txt   VS   \archive.zip\parent_folder\file.txt )
  • başarısız örnekleri görüntülemek veya hata yoksa bir başarı mesajı görüntülemek için bir hata günlüğü ekledi

@Echo OFF
SetLocal EnableDelayedExpansion



Rem //  7-Zip Executable Path
Set sevenZip="C:\Program Files\7-Zip\7z.exe"



Rem // START: NewLine Variable Hack
Set newLine=^


Rem // END: NewLine Variable Hack !! DO NOT DELETE 2 EMPTY LINES ABOVE !!



Rem //  Set ErrorLog Variables
Set errorCount=0
Set separator=--------------------------------------------------------
Set errorLog=!newLine!!newLine!!separator!!newLine!!newLine!
Set errorPrefix=ERROR @:
Set successMessage=All Files Were Successfully Archived



Rem //  Loop Through Each Argument
SetLocal DisableDelayedExpansion
for %%x in (%*) do (

    Rem //  Use Current Argument To set File, Folder, & Archive Paths
    SetLocal DisableDelayedExpansion
    Set filePath="%%~x"
    Set directoryFiles="%%~x\*"
    Set archivePath="%%~x.zip"
    SetLocal EnableDelayedExpansion

    Rem //  Source Is A Folder
    if exist !directoryFiles! (
            Set sourcePath=!directoryFiles!
    )

    Rem //  Source Is A File
    if not exist !directoryFiles! (
            Set sourcePath=!filePath!
    )

    Rem //  Print Separator To Divide 7-Zip Output
    echo !newLine!!newLine!!separator!!newLine!!newLine!

    Rem //  Add Files To Zip Archive
    !sevenZip! A -TZIP !archivePath! !sourcePath!

    Rem //  Log Errors
    if ErrorLevel 1 (
        Set /A errorCount=errorCount+1
        Set errorLog=!errorLog!!newLine!!errorPrefix!!sourcePath!
    )
)



Rem //  Print ErrorLog
if !errorCount!==0 (
    Set errorLog=!errorLog!!newLine!!successMessage!
)
Echo !errorLog!!newLine!!newLine!!newLine!



Rem //  Keep Window Open To View ErrorLog
pause

1

7-zip, her dosyayı kendi klasörüne (* /) ayırmak için bir seçeneğe sahiptir, ancak aradığınız ters eylemi yapmak için bağlam komutlarından yoksundur.

Bununla birlikte, geçmişte winrar kullanarak bu şeyi yaptığımı hatırlıyorum. Bir seçenek "klasör başına benzersiz arşiv" veya bunun için bir şey var.


-1

Picasa'yı edinin ve picasa'nın web albümüne yükleyin. Sonra herkes fotoğrafları kolayca çevrimiçi alabilir ve görüntüleyebilir.Orijinalleri bile yükleyebilir (aileniz daha büyük sürümleri yazdırabilir)


Eğer insanlar zip dosyalarını indirmek ve ayıklamaktan memnun olacağını düşünüyorsanız, ne yazık ki hayal kırıklığına uğrayacağınızı düşünüyorum ... Web arayüzü dahil herkes için çok daha kolay ....
Kurru
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.