7zip Kommandozeile

fffranz

Cadet 2nd Year
Registriert
Okt. 2016
Beiträge
23
Hallo,
vielleicht weiß jemand von Euch Rat: ich komme hier nicht weiter mit 7zip.
Ich habe eine ganze Menge von Dateien zu packen. Die liegen alle in einem Ordner und haben jeweils paarweise den gleichen Dateinamen aber unterschiedliche Endungen. Z.B. Text1.pdf und Text1.txt, Hilfe1.pdf und Hilfe1.txt usw. (Die Zahl variiert immer und kommen auch mehrfach vor)

Ich möchte die Dateien immer paarweise packen - also aus text1.pdf und text1.txt soll text1.zip werden.

Die Frage ist, kann man das automatisieren oder ist das zuviel für 7zip? Ich habe schon versucht, mich in diese Befehle und Schalter einzulesen, sehe aber den Wald vor lauter Bäumen nicht - und bin daher dankbar für jeden Tip.

Gruß aus Berlin - Frank
 
Alleine mit 7zip geht so was nicht. Da müsstest du schon selbst ein Skript schreiben.
Windows Scripting Host, Powershell, bash, etc.
 
Danke für die Info. Das wird dann wohl kompliziert - ich dachte, das geht einfach zu regeln. Schade.
Gruß - Franz
 
Trotzdem ist es mit einer Befehlszeile machbar, die Originaldateien kannst ja nachher in zweitem Schritt löschen.

c:\temp>for /F "tokens=1 delims=." %n in ('dir /b d:\Dokumente\*.pdf') do "c:\Program Files\7-Zip\7z.exe" a %n.7z d:\Dokumente\%n.*

So in der Art etwa, probiere das mal aus. "d:\Dokumente" mal angenommen als der Ordner, in dem die fraglichen Dateien enthalten sind,

edit:
um die Originale zu löschen, dafür gibt es bei 7z auch den -sdel switch, den man oben nach " 7z.exe a" anhängen könnte.
 
Zuletzt bearbeitet:
Danke Hitcher für Deine Mühe. Leider klappt das nicht - habe alles in eine zip.bat gepackt und ausgeführt. Der meckert aber schon bei c:\temp (kann nicht gefunden werden) und dann geht es nicht weiter.
Gruß - Franz
 
Natürlich war das nur als Beispiel zu sehen, das entsprechend deiner Verzeichnisse anpassen musst.

"c:\temp>" am Anfang ist das Verzeichnis, von wo aus die Befehlszeile startet, und wo 7z die komprimierten Dateien ablegt. Anfangen tut die Befehlszeile mit "for".
 
Ja, verstehe, aber c:\temp existiert und es geht nicht weiter. Ich habe auch direkt mit "for" angefangen - aber da geht es auch nicht weiter. Die Verzeichnissepfade habe ich korrekt eingestellt.
Wäre es einfacher zu gestalten, wenn 7zip.exe und .dll direkt im Ordner sind, wo die Dateien liegen?
 
Hmm, ich weiß auch nicht, wo bei dir dann der Fehler liegt. Vielleicht hast einfach vergessen das Quellverzeichnis zweimal anzugeben.
Das könnte man zwar auch anders lösen, aber im Beispiel oben ist "D:\Dokumente" ja auch zweimal angegeben, das musst also auch 2x an deine vorhandenen Verzeichnisse anpassen.
 
Wenn FOR aus einer Batchdatei heraus ausgerufen wird, sind für die Variablen zwei Prozentzeichen zu setzen.
Edit: Kurz getestet und es funktioniert bei mir, also für die Batch (Pfade anpassen):
Code:
for /F "tokens=1 delims=." %%n in ('dir /b *.txt') do "D:\Program Files\7-Zip\7z.exe" a %%n.7z %%n.*
 
Zuletzt bearbeitet:
Hallo Simpsonfan,

Danke für Deine Mühe - ich bin beeindruckt, wie tief ihr hier in der Materie steht. Wäre ich im Leben nicht drauf gekommen.

Zum Thema: es läuft zumindest schon mal durch. Es entsteht aber nur eine ZIP-Datei ohne die Zahl im Namen und die ist leer ;-)
Ich habe es noch mal mit anderen Daten probiert, pdf und jpg. Die Verzeichnisse habe ich auch angepaßt. Irgendwo hakt es noch.

Bild.jpg
 
Versuche mal 7z die Variable %n in Anführungszeichen zu übergeben.

7z.exe a "%%n".7z "%%n".*

7z scheint ansonsten keine Leerzeichen in Dateinamen als Variable zu übernehmen.
 
He Hitcher - Du hast den Vogel abgeschossen:evillol: Ich weiß zwar nicht, wie man so was wissen kann - aber es funktioniert. Großes Dankeschön
Gibt es hier so was wie eine Kaffeekasse oder kann ich Dir was zukommen lassen? Das hilft mir ungemein mit dem ganzen Kram hier zurecht zu kommen.
Eine Frage noch, falls es nicht zu vermessen ist: kann ich z.B. die PDF mit einem Befehl vor dem Packen gleich noch mit einer anderen Endung versehen?
Soweit bin ich schon - for %i in (*.PDF) do set x=%i&ren "%i" "!x:pdf=eps" aber das funktioniert nicht.

Gruß aus Berlin - Franz
 
Batch kann keine Smileys ;-p

Willst du alle pdf-Dateien im jeweiligen Ordner vor dem Packen umbenennen? In dem Fall einfach als erste Zeile in die Batch noch ein
Code:
ren *.pdf *.eps
davor und dann in der zweiten Zeile pdf entsprechend mit eps ersetzen.

Hier im Forum kannst du übrigens deinen Batch-code in [code] ... [/code]-Tags einschließen, dann greift auch nicht die automatische Smiley-Ersetzung.
 
Naja, man hilft ab und zu doch gerne, und findet auch selbst immer wieder mal eine Lösung in div. Foren.
Ist also ein Projekt zum Nutzen des Gemeinwohls.
Wichtig ist bei solchen Problemchen, nicht gleich aufzugeben, und alle Möglichkeiten durch zu probieren, ggf. neue Möglichkeiten suchen.

Umbenennnen müsste ganz ähnlich gehen, wenn statt 7z einfach rename aufrufst.
Code:
c:\temp>for /F "tokens=1 delims=." %n in ('dir /b d:\Dokumente\*.pdf') do ren  d:\Dokumente\"%n".pdf "%n".eps

warum einfach, wenn es kompliziert auch geht ;-)
 
Zuletzt bearbeitet:
Na dann noch mal vielen Dank, war sehr hilfreich. Ist faszinierend, was man damit alles hinbekommt.

die Zeile habe ich noch etwas angepaßt (%%n statt %n) vorher hat er wieder gemeckert. Sieht einfacher aus als das, was ich gefunden habe.
Statt der Pfadangabe habe ich 7zip im selben Ordner, das ist einfacher wie ich finde. Schnell hat man sich mal vertippt.

for /F "tokens=1 delims=." %%n in ('dir /b *.pdf') do ren "%%n".pdf "%%n".eps

Schönen Abend
Franz
 
Zurück
Oben