Wie packe ich in einer Ordnerstruktur Dateien mit bestimmter endung in einzelne ZIP-Archive?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Eingabeaufforderung (direkt):

for /r "Haupt" %A in ("*.smc") do ("pfad\zum\packer\packer.exe" -optionNachherLöschen -weitereOptionen packbefehl "%~dpnA.zip" "%A")

Hierbei "Haupt", "pfad\zum\packer\packer.exe", -optionNachherLöschen, -weitereOptionen, packbefehl durch die entsprechenden Parameter ersetzen.

Batch-Datei (Prozentzeichen vor der Schleifenvariablen verdoppeln):

for /r "Haupt" %%A in ("*.smc") do ("pfad\zum\packer\packer.exe" -optionNachherLöschen -weitereOptionen packbefehl "%%~dpnA.zip" "%%A")


PWolff  08.05.2016, 18:17

Für 7-Zip sähe das z. B. so aus

(ich hab keinen Schalter für das Löschen gepackter Dateien gefunden, deshalb nehme ich das in die Kommandozeile mit auf):

for /r "Haupt" %A in ("*.smc") do ("%ProgramFiles(x86)%\7-Zip\7z.exe" a -tzip "%~dpnA.zip" "%A" && del "%A")

bzw. (Batch)

for /r "Haupt" %%A in ("*.smc") do ("%ProgramFiles(x86)%\7-Zip\7z.exe" a -tzip "%%~dpnA.zip" "%%A" && del "%%A")

Erklärungen:

for - führt einen Befehl (oder eine Befehlsfolge) für eine Reihe von Dateien durch

/r - rekursiv, d. h. hier: berücksichtige alle Unterordner

%A bzw. %%A - "Schleifenvariable": wird bei jedem Durchlauf durch den Namen einer der zu behandelnden Dateien ersetzt

in - leitet das Muster ein, nach dem die Namen der zu bearbeitenden Dateien ermittelt werden (das Muster muss aus irgendwelchen Gründen immer in Klammern stehen)

do - leitet den Befehl ein, der für jede der Dateien ausgeführt werden soll

(...) - fasst mehrere Befehle zu einer Befehlsgruppe zusammen, z. B. um sie hintereinander in einer For-Schleife ausführen zu können

%ProgramFiles(x86)% - "Umgebungsvariable" - unterhalb dieses Ordners hat sich bei mir 7Zip installiert

"%ProgramFiles(x86)%\7-Zip\7z.exe" - vollständiger Pfad und Dateiname zur Kommandozeilenversion von 7z

a - weist 7z an, die Datei(en) zum Archiv hinzuzufügen (und das Archiv anzulegen, falls nicht vorhanden)

-tzip - weist 7z an, das ZIP-Format zu verwenden (statt des eigenen 7z-

Formats)

"%~dpnA" bzw. "%%~dpnA" - nimmt vom vollständigen Dateinamen nur den Laufwerksbuchstaben (d), den Pfad (p) und den Namen ohne Endung (n) mit

&& (zwischen zwei Kommandozeilenbefehlen) - führt den 1. Befehl aus, prüft auf einen Fehlercode und führt den 2. Befehl nur aus, falls der 1. Befehl erfolgreich (Fehlercode = 0) beendet wurde

0
Antonireykern 
Fragesteller
 08.05.2016, 19:02
@PWolff

Ich bekomme nur 

"Mehr?" Zurück.

Egal was ich eingebe, es passiert nichts.

0
Antonireykern 
Fragesteller
 08.05.2016, 19:07
@Antonireykern

Und wenn ich zweimal "%" eintippe, kommt nur 

"%%A" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
0
PWolff  08.05.2016, 19:59
@Antonireykern

Das doppelte Prozent-Zeichen gilt nur in "Batch-Dateien".

Ich habe hier den Fehler gerade auch bekommen - habe aber die Zeile von Hand abgetippt und dabei ein doppeltes Anführungszeichen vergessen. Als ich das eingesetzt habe, hat es funktioniert.

(Windows 8.1 - Ausgabe von "ver": "Microsoft Windows [Version 6.3.9600]")

0
Antonireykern 
Fragesteller
 11.05.2016, 17:36
@PWolff

Ich habe noch ein Problem:

In den Dateien sind Leerzeichen. 

Deswegen wird für jeden Textabschitt nach einem Leerzeichen der Befehl einzeln ausgeführt, so wird jede Datei - welche Leerzeichen enthält - nicht gepackt, weil sie nicht gefunden wird.

Wenn du DAS noch löst, gibts den Stern ^^


WARNING: Das System kann die angegebene Datei nicht finden.
(J)


WARNING: Das System kann die angegebene Datei nicht finden.
[f1].smc
0
PWolff  11.05.2016, 18:44
@Antonireykern

Die Leerzeichen sollten eigentlich durch die Anführungszeichen um die Dateinamen als Namensbestandteil berücksichtigt werden.

Stell mal die Kommandozeile bzw. die Batch-Datei hier ein.

0
Antonireykern 
Fragesteller
 11.05.2016, 19:22
@PWolff

Ich meine, da ja nur der Pfad in Anführungszeichen steht und der eigentliche Dateiname -Dahinter-, aber HIER:

PS: Unter batch genau das gleiche


for /r ""C:\Users\Public\Downloads\GoodSNES2.04"" %A in (""*.smc"") do (7z.exe a -tzip ""%~dpnA.zip"" ""%A"" && del ""%A"")
0
PWolff  11.05.2016, 19:54
@Antonireykern

Du hast zu viele doppelte Anführungszeichen (") da drin. Die dürfen nicht doppelt vorkommen, sonst heben sie sich in ihrer Wirkung auf.

0
Antonireykern 
Fragesteller
 11.05.2016, 20:12
@PWolff

OK. Danke. Hier dein Sternchen.


for /r "C:\Users\Public\Downloads\GoodSNES2.04" %A in ("*.smc") do (7z.exe a -tzip "%~dpnA.zip" "%A" && del "%A")
0
Antonireykern 
Fragesteller
 27.02.2017, 17:28
@PWolff

Hallo, 

Ich bins nochmal.

Ich benötige jetzt das selbe, nur in Linux/Bash. Leider habe ich es nicht geschaft die Schleife für bash zu portieren. Kann ich einfach den für Windows nehmen (aber mit Zip-befehl), oder kannst du mir da Helfen?

0
PWolff  27.02.2017, 23:47
@Antonireykern

Die Syntax von for findest du bei https://wiki.ubuntuusers.de/Shell/Bash-Skripting-Guide_f%C3%BCr_Anf%C3%A4nger/

(am besten nach " for " suchen - mit den Leerzeichen davor und dahinter)

ich denke, es ist einfacher, eine Skriptdatei zu erzeugen, als das direkt auf der Kommandozeile auszuprobieren. Die Datei kann man ja wieder löschen, sobald sie nichf mehr gebraucht wird.

Zu ZIP-Dateien erzeugen: http://praxistipps.chip.de/ubuntu-zip-dateien-erstellen-so-gehts_33182

(Warum es mit Bordmitteln scheitern könnte, siehe https://de.wikipedia.org/wiki/ZIP-Dateiformat#Name.2C_Namensverwirrung )

0

Och nö.

Die Struktur wird nicht gescheit angezeigt D':


PWolff  08.05.2016, 17:39

Als Code formatieren (markieren und auf das Symbol <> über dem Eingabefeld klicken)

0