So erstellen Sie mit 7-zip eine ganze Reihe von Ordnern

18

Ich habe ein paar Bilder bekommen, die ich in 800x600 Pixel zuschneiden musste. Das war einfach, aber jetzt muss ich sie hochladen, damit die Familie sie alle sehen kann.

Das sind 500MB in Bildern. Ich habe mich dazu entschlossen, einfach die separaten Ordner zu komprimieren, die jeweils fast die gleiche Anzahl von Bildern enthalten. Auf diese Weise kann ich jeden Tag ein paar hochladen. Dies manuell zu tun ist eine sehr lange und harte Arbeit. Ich frage mich, ob es eine Möglichkeit gibt, 7-zip-Handles für jeden Ordner einzeln zu erstellen.

Ich denke, ich brauche eine Batch-Datei, aber damit bin ich nicht gut. Ich habe alles unter einem Ordner abgelegt. In den verschiedenen Unterordnern befinden sich die Bilder. Was ich brauche, ist, dass der Inhalt dieses Ordners komprimiert wird. Ich bin nicht sicher, ob ich den Ordner einfach mitzippen kann. Ich weiß, dass PHP ein zip-Modul hat, ich habe gerade noch nie damit gearbeitet, deshalb bin ich mir nicht sicher, ob es die Tatsache verarbeiten kann, dass der Inhalt der zip ein Ordner ist, der die Elemente enthält, anstatt nur die Elemente.

KdgDev
quelle
1
Von wie vielen Ordnern redest du? 7? 147? Wenn Sie mit Batch-Dateien nicht gut umgehen können, ist dies möglicherweise eine gute Gelegenheit, diese Herausforderung anzupacken. :)
JMD
105 Ordner insgesamt
KdgDev

Antworten:

25

Führen Sie den Befehl an einer Eingabeaufforderung aus, deren Arbeitsverzeichnis Ihr My PicturesVerzeichnis ist. Mit diesem Befehl wird eine ZIP-Datei mit dem Inhalt jedes Unterverzeichnisses erstellt, wobei alle ZIP-Dateien in Ihrem My PicturesVerzeichnis verbleiben .

Bearbeiten: Ich habe die Anführungszeichen hinzugefügt, die erforderlich sind, um Verzeichnisse mit Leerzeichen im Namen zuzulassen.

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

Außerdem: In der folgenden Version werden Dateien nicht in ein Unterverzeichnis innerhalb der ZIP-Datei, sondern in deren Stammverzeichnis abgelegt:

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

In Windows 7 und höher

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

oder

for /D %d in (*.*) do 7z a -tzip "%d.zip" ".\%d\*"
eleven81
quelle
Ich habe versucht, den 7-Zip-Ordner meinem Klassenpfad hinzuzufügen, aber es funktioniert nicht. Wenn ich die gesamte Zeichenfolge verwende, um die ausführbare Datei zu suchen, anstatt nur 7z, funktioniert es. Sollte das Hinzufügen dieser Zeichenfolge zum Klassenpfad den gleichen Effekt haben?
KdgDev
Hier classpathsucht Java nach Klassen und Bibliotheken. google.com/search?q=classpath Sie haben das anscheinend mit dem Ort verwechselt, an dem pathdie Shell nach ausführbaren Dateien sucht.
11.
Frage: Das Skript funktioniert, aber nicht, wenn der
Ordnername
Danke für das Update. Meinen Sie mit dem zweiten Skript, dass der Inhalt der Zip "abgeflacht" wird?
KdgDev
6
Dies funktionierte für mich hervorragend, obwohl ich zu wechseln hatte %%d, %dda sich meine Win 7-Box darüber beklagte, dass der Variablenname zu lang war und der Fehler "%% d war zu diesem Zeitpunkt unerwartet" ausgegeben wurde.
Benjam
7

Ich konnte die Befehlszeile nicht zum Laufen bringen , stattdessen habe ich WinRAR heruntergeladen und mtone war richtig - WinRAR hat die Option, mehrere Ordner in ihre eigenen separaten ZIP-Dateien zu komprimieren .

ZB C:\Files\Fables 01hinein C:\Files\Fables 01.zipund C:\Files\Fables 02hinein C:\Files\Fables 02.zip.

Öffnen Sie in WinRAR den Ordner mit den Ordnern, die Sie komprimieren möchten, und führen Sie die folgenden Schritte aus:

  • Wählen Sie alle Ordner aus, die Sie komprimieren möchten
  • Klicken Sie auf "HINZUFÜGEN" oder Alt+ Aoder auf Befehle -> "Dateien zum Archiv hinzufügen".
  • Wählen Sie RAR oder ZIP
  • Gehen Sie zur Registerkarte "Dateien"
  • Aktivieren Sie "Jede Datei in ein separates Archiv stellen" im Feld "Archive"

Wenn Sie weitere Einstellungen vorgenommen haben, die Sie korrigieren möchten, klicken Sie auf OK und dann auf Boom: Mehrere ZIP-Dateien aus mehreren Ordnern. Dies funktionierte so viel einfacher als 7zip über die Kommandozeile.

user134042
quelle
Obwohl dort "jede Datei" steht, funktioniert dieses Kontrollkästchen auch mit Ordnern.
Dhaupin
1
Von allen hier vorgeschlagenen Lösungen hat diese im Jahr 2018 am besten für mich funktioniert. Stellen Sie nur sicher, dass Sie das Archiv als .zip-Datei speichern möchten, da sonst eine Reihe von .rar-Dateien erstellt werden.
Eric Hepperle - CodeSlayer2010
5

Nur ein kleines Update der Antwort von eleven81: Der folgende Code erstellt eine Batch-Datei, auf die mehrere Elemente abgelegt werden können.

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

Diese Batchdatei kann dann über die Registrierung zum Kontextmenü hinzugefügt werden:

  1. Erstellen Sie einen neuen Schlüssel unter [HKEY_CLASSES_ROOT \ Folder \ shell] und nennen Sie ihn cmd1
  2. Bearbeiten Sie den Zeichenfolgenwert und nennen Sie ihn "Batch Zip".
  3. Erstellen Sie einen weiteren neuen Schlüssel unter diesem und rufen Sie ihn auf
  4. Ändern Sie den Wert in Ihren Pfad, indem Sie doppelte Schrägstriche verwenden

Mein Eintrag lautet beispielsweise "C: \ Users \ Rory \ Dropbox \ _apps \ batch_zip.bat" "% 1".

Sobald Sie dies getan haben, haben Sie einen Eintrag in Ihrem Kontextmenü für 'Batch Zip', der alle ausgewählten Ordner in separate Archive packt

Wenn Sie dies jedoch über das Kontextmenü tun, werden leider alle Vorgänge gleichzeitig ausgeführt, und jeder, der viel gezippt und entpackt hat, weiß, dass das Zippen von Ordnern nacheinander viel schneller als auf einmal funktioniert.

Wenn jemand eine Möglichkeit kennt, dies in der Registrierung zu beheben, teilen Sie dies bitte mit.

Ziehen Sie die ausgewählten Ordner nacheinander auf den Stapel.

Roryok
quelle
1
Die 7z-Exe war nicht auf meinem Weg und so musste ich Ihr Skript leicht bearbeiten. "C: \ Programme (x86) \ 7-Zip \ 7z.exe" a -tzip "% ~ 1.zip" "% ~ 1"
Ryan
1
+1 für die Förderung der Faulheit mit Drag & Drop lol. Ich habe gerade eine geänderte Version gepostet @ http://superuser.com/a/1160047/678687
Enteleform
3

Tipp: Wenn es sich bei Ihren Bildern um JPGs handelt, sind diese bereits komprimiert. Verwenden Sie 7-Zip im Archivmodus ohne Komprimierung (Komprimierungsstufe: Speichern), um den Vorgang erheblich zu beschleunigen.

Selbst wenn Sie Ultra-Komprimierung verwenden, werden Sie kaum 5% gewinnen, sicherlich nicht die Mühe wert.

Ich dachte daran, Anhänge praktisch hinzuzufügen.

Ich würde sie nicht als E-Mail-Anhang senden. Laden Sie das Programm lieber auf einen sogenannten One-Click-Hosting-Server hoch (z. B. drop.io, rs, mu, ms usw., es gibt eine große Auswahl) und senden Sie den Download-Link per E-Mail an Ihre Freunde und Familie.


quelle
2
Sie sind jedoch einfacher zu verschicken.
Turm
Ich glaube nicht, dass es einen großen Unterschied beim Hochladen von 475 oder 500 MB gibt, sicherlich nicht genug, um die Zeit auszugleichen, die zum Komprimieren von millionen JPGs mit "Ultra"
Ich dachte daran, Anhänge praktisch hinzuzufügen. Es ist einfacher, eine Datei als Anhang anstelle von 10 hinzuzufügen (wenn die Anzahl der Dateien zunimmt, wird dies ärgerlich).
Turm
Deshalb schlug Molly den "Archiv" -Modus vor. Es stopft sie alle in eine Datei, ohne Zeit zu verschwenden und zu versuchen, etwas zu komprimieren, das bereits komprimiert ist ...
Adrien
Es ist wahr, dass ich auf ihren letzten Satz zurückgegriffen habe, aber trotz der geringen Reduzierung der Größe von JPEG-Dateien (und manchmal ist es auch nicht so klein), lohnt es sich trotzdem. Der Zeitaufwand für die Komprimierung ist weitaus geringer als der Zeitaufwand für das Hochladen, beispielsweise von Google Mail oder einer anderen E-Mail (Google Mail hat eine relativ große Anzahl von Anhängen).
Turm
2

Ich fand Roryoks Antwort sehr hilfreich, er stellte eine batch scriptfür Windowsdie drag-&-dropDatei zur Verfügung, um sie schnell und automatisiert zu archivieren.


Um dieses Skript zu verwenden, speichern Sie es einfach mit einer .batErweiterung. Anschließend können Sie Dateien und / oder Ordner per Drag & Drop auf die Stapeldatei ( oder eine Verknüpfung zur Stapeldatei ) ziehen.

.zipDateien werden im selben Verzeichnis wie die Quelldateien erstellt.
( obwohl das Ziel im Skript @ geändert werden kannarchivePath )


Einige Aktualisierungen, die ich vorgenommen habe, um die Anpassbarkeit und die allgemeine Funktionalität zu verbessern:

  • benannte Variablen hinzugefügt
  • implementiert eine forSchleife, die durch die angegebenen Argumente iteriert
    ( zusammen mit delayedexpansionLaufzeitvariablen zu ermöglichen )
  • ifBedingungen hinzugefügt , um files& zu unterscheidenfolders
    • Auf diese Weise können Ordnerinhalte direkt zum Archiv hinzugefügt werden, anstatt den übergeordneten Ordner in das Archiv einzuschließen
      (z. B.   \archive.zip\file.txt   VS   \archive.zip\parent_folder\file.txt ).
  • Ein Fehlerprotokoll wurde hinzugefügt, um fehlgeschlagene Instanzen anzuzeigen oder eine Erfolgsmeldung anzuzeigen, wenn keine Fehler aufgetreten sind

@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
Enteleform
quelle
1

7-zip bietet die Option, jede Datei in einen eigenen Ordner (* /) zu UNZIPPEN, es fehlen jedoch die Kontextbefehle, um die von Ihnen gesuchte gegenteilige Aktion auszuführen.

Trotzdem erinnere ich mich, dass ich in der Vergangenheit genau das mit winrar gemacht habe. Es gibt eine Option "eindeutiges Archiv pro Ordner" oder etwas in diesem Sinne.

mtone
quelle
-1

Holen Sie sich Picasa und laden Sie es in das Webalbum von Picasa hoch. Dann kann jeder die Fotos ganz einfach online stellen und ansehen. Vielleicht können sogar die Originale hochgeladen werden (damit Ihre Familie die größeren Versionen drucken kann).

Kurru
quelle
Wenn Sie glauben, dass die Leute mit dem Herunterladen und Extrahieren von ZIP-Dateien zufrieden sind, werden Sie leider enttäuscht sein ... Die Weboberfläche ist für alle Beteiligten viel einfacher ....
Kurru