Wie packe ich in einer Ordnerstruktur Dateien mit bestimmter endung in einzelne ZIP-Archive?
Ich habe eine Ordnerstruktur, in der Dateien mit der Endung .smc verstreut sind.
Ich möchte diese jetzt in einzelne ZIP-Archive packen, den Ort beibehalten und die Originaldatei Löschen.
Also von
Haupt | ---Unter1 | | | ---Datei1.smc ---Unter2 | ---Datei2.smc
ZU--
Haupt | ---Unter1 | | | ---Datei1.Zip ---Unter2 | ---Datei2.Zip
Hinweise: 1. Es MÜSSEN! Zip-Archive sein. 2. Ja, das sind SNES-Roms.
DANKE! im Voraus.
2 Antworten
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")
Und wenn ich zweimal "%" eintippe, kommt nur
"%%A" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
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]")
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
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.
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"")
Du hast zu viele doppelte Anführungszeichen (") da drin. Die dürfen nicht doppelt vorkommen, sonst heben sie sich in ihrer Wirkung auf.
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")
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?
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 )
Och nö.
Die Struktur wird nicht gescheit angezeigt D':
Als Code formatieren (markieren und auf das Symbol <> über dem Eingabefeld klicken)
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):
bzw. (Batch)
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
- vollständiger Pfad und Dateiname zur Kommandozeilenversion von 7z"%ProgramFiles(x86)%\7-Zip\7z.exe"
a - weist 7z an, die Datei(en) zum Archiv hinzuzufügen (und das Archiv anzulegen, falls nicht vorhanden)
- weist 7z an, das ZIP-Format zu verwenden (statt des eigenen 7z--tzip
Formats)
"%~dpnA"
bzw.
-"%%~dpnA"
nur den Laufwerksbuchstaben (d), den Pfad (p) und den Namen ohne Endung (n) mitnimmt vom vollständigen Dateinamen
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&& (zwischen zwei Kommandozeilenbefehlen) - führt