tigre-rojo
Goto Top

Dateien in einem Ordner nacheinander einzeln zippen, wie definiere ich die zu zippende Datei? (Batch, DOS)

Was ich nicht kann, ist die Datei zu bestimmen, die gezippt werden soll. Der Rest ist klar (bisher zumindest).

Hallo,

habe mir mit Hilfe der Suche folgendes Skript (unter DOS) zusmmengestellt; einzelne Teile funktionieren auch wunderbar.

Ich möchte gerne alle Dateien eines bestimmten Ordners zippen. Aber einzeln.

Soweit bin ich schon:
:: 1.0 ins Verzeichnis mit den ungezippten Dateien wechseln
F:
cd F:"\testdaten\ungezippte Dateien"  

:: 1.1 Erklärung zu 1.0
:: alle Dateien in diesem Ordner sind nach folgendem Schema benannt
:: 2009-01-12~text.bkf, also JJJJ-MM-TT~text.bkf
:: "~text" ist immer gleich, also immer "~text" 
:: Die Datei beginnt in 2009 z.B. mit 2009-10-21~text.bkf und wird hochgezählt bis 2010-01-20~text.bkf
:: Grundsätzlich fortlaufend, aber teilweise fehlt auch mal ein Tag, auf 2009-11-22~text.bkf kommt dann 2009-11-25~text.bkf


: ---------- 2.0 Brauche Hilfe ---------------
:: 2.0 
:: "Ermittle die erste Datei, ordne die Datei einer Variablen zu, damit diese Datei 
:: im nächsten Schritt mit 7-Zip gezippt werden kann ...


: Funktioniert.
:: 3.0 Zippe die Datei und speichere die gezippte Datei
:: (erst Zielordner\Name der gezippten Datei.zip, dann Quellordner)

Set ZIPFILE=%in2.0definierteDatei%.zip ' ist nur ein Beispielname  

7z.exe a -r -tzip "J:\testgezippt\%ZIPLFILE%" "F:\testdaten\ungezippte Dateien\"in2.0definierteDatei"  


: Funktioniert.
:: 4.0 Verschiebe die %in2.0definierteDatei" (also die ungezippte datei) 

MOVE /Y "F:\testdaten\ungezippte Dateien\%in2.0definierteDatei% J:\testgezippt\rohdaten  


: ---------- 5.0 Brauche Hilfe ---------------
:: 5.0 Fange bei 2.0 wieder an ...


:: Funktioniert.
:: 6.0 Wenn fertig, dann erstelle Fertig.txt in und versende diese per E-Mail
:: die Definiton der folgenden Variablen möchte ich hier nicht nennen :-)

blat.exe %pfad_log% %smtpserver% %user% %server% %paswo% %toMail% %frMail% %subj% %X%

Ich hoffe, mit dieser Struktur meine Frage verständlich gemacht zu haben, ohne allzuviel Worte zu verlieren.
Ich komme mit Zeile 13 und Zeile 34 nicht weiter.

Würde mich freuen, wenn mir da jemand weiterhelfen kann.
(Vielleicht gibt es ja auch eine viel kürzere Version, denn ich möchte ja eh alle Dateien des Ordners zippen.)

Gruß,
der Tigre

Content-Key: 134799

Url: https://administrator.de/contentid/134799

Printed on: April 19, 2024 at 09:04 o'clock

Mitglied: 48507
48507 Jan 31, 2010 at 14:18:57 (UTC)
Goto Top
Du brauchst eine Schleife. So ungefähr:
FOR %%i IN ("F:\testdaten\ungezippte Dateien\*.*) DO 7z.exe a -r -tzip "J:\testgezippt\%ZIPFILE%"  
Member: bastla
bastla Jan 31, 2010 at 14:56:09 (UTC)
Goto Top
... bzw
FOR %%i IN ("F:\testdaten\ungezippte Dateien\*.*) DO (  
    7z.exe a -tzip "J:\testgezippt\%%~ni.zip" "%%i" && MOVE "%%i" "J:\testgezippt\rohdaten"  
)
Noch als Anmerkung zum Schritt 1.0: Wenn ohnehin mit absoluten Pfaden gearbeitet wird, ist eigentlich das Wechseln in das Verzeichnis "F:\testdaten\ungezippte Dateien" unnötig ...

Grüße
bastla

[Edit] Verschieben vom Errorlevel des ZIP-Vorganges abhängig gemacht [/Edit]
Member: Tigre-Rojo
Tigre-Rojo Jan 31, 2010 at 15:23:53 (UTC)
Goto Top
Hallo bastla,

danke.

Nur damit ich es verstehe:

- %%1 ist die erste Datei im Ordner?

- was ist denn %%~ni.zip ? oder soll das %%i heißen?

Deine Anmerkung werde ich befolgen und das ganze jetzt mal testen.
Melde mich dann.
Member: bastla
bastla Jan 31, 2010 at 15:30:02 (UTC)
Goto Top
Hallo Tigre-Rojo!
- %%1 ist die erste Datei im Ordner?
Nein - nicht die Ziffer "1", sondern der Buchstabe "i"; außerdem wird jede Datei der Reihe nach als "%%i" angesprochen (in Basic wäre zB dieses "%%i" die Laufvariable einer "For Each"-Schleife) ...
- was ist denn %%~ni.zip ? oder soll das %%i heißen?
Da "%%i" den vollen Pfad enthält, Du aber nur den Dateinamen (ohne Extension) als Namen der ZIP-Datei benötigst, wird dieser mit "%%~ni" extrahiert (siehe dazu: "for /?" gegen Ende) - aus "F:\testdaten\ungezippte Dateien\2009-01-12~text.bkf" wird dadurch "2009-01-12~text"; daran wird dann noch ".zip" angefügt.
Die erste Zeile ließe sich übrigens bei Bedarf (wenn auch andere, nicht zu zippende Dateien im Ordner "F:\testdaten\ungezippte Dateien" enthalten wären) genauer mit
FOR %%i IN ("F:\testdaten\ungezippte Dateien\20*-text.bkf) DO (
formulieren.

Grüße
bastla
Member: Tigre-Rojo
Tigre-Rojo Jan 31, 2010 at 15:39:53 (UTC)
Goto Top
Hallo Bastla,

prima.Danke. Jetzt verstehe ich es. (die "1" sollte ein "i" sein).

Aber ich mache wohl etwas noch falsch, denn "es geht nicht" - was nicht geht kann ich nicht sagen, weil "das DOS Fenster sofort wieder zu geht". ichblamiermich

Zum Testen habe ich in einer eigenen CMD stehen:

FOR %%i IN ("F:\test\*.*) DO (  
    7z.exe a -tzip "F:\gezippt\%%~ni.zip" "%%i" && MOVE "%%i" "F:\rohdaten"  
)

Was übersehe ich?

Gruß
Tigre
Member: bastla
bastla Jan 31, 2010 at 15:54:35 (UTC)
Goto Top
Hallo Tigre!

Zum Testen empfiehlt es sich grundsätzlich, den Batch von der Kommandozeile aus zu starten; zumindest kannst Du aber als letzte Zeile
pause
verwenden, um die Ausgaben lesen zu können.

Was übersehe ich?
Fehlt Das schließende Anführungszeichen nach *.* in der ersten Zeile auch in Deinem Batch oder nur in der geposteten Version?

"F:\gezippt" und "F:\rohdaten" sollten übrigens bereits vorweg erstellt worden sein.

Grüße
bastla
Member: Tigre-Rojo
Tigre-Rojo Jan 31, 2010 at 16:06:12 (UTC)
Goto Top
Zitat von @bastla:
Fehlt Das schließende Anführungszeichen nach *.* in der ersten Zeile auch in Deinem Batch oder nur in der geposteten
Version?

Das wars. Danke.

Noch eine Frage:

Zitat von @bastla:
[Edit] Verschieben vom Errorlevel des ZIP-Vorganges abhängig gemacht [/Edit]


Inwiefern?

Gruß
Tigre
Member: bastla
bastla Jan 31, 2010 at 16:11:37 (UTC)
Goto Top
Hallo Tigre!
Verschieben vom Errorlevel des ZIP-Vorganges abhängig gemacht
Inwiefern?

Grüße
bastla
Member: Tigre-Rojo
Tigre-Rojo Jan 31, 2010 at 16:18:51 (UTC)
Goto Top
Hallo bastla!

Perfekte Antwort. Danke. Danke. Danke.

Du hast mir die nicht gestellte Frage beantwortet, wie ich denn im a) Erfolgsfall b) nicht Erfolgsfall jeweils eine E-Mail mit enstprechendem Text
sende; das bastel ich mir mal zusammen, wenns nicht klappt, bis gleich im neuen Thread. face-smile

Gruß
Tigre
Member: KSDKSD
KSDKSD Feb 25, 2010 at 07:49:00 (UTC)
Goto Top
Hallo miteinander

Mich beschäftigt ein ähnliches Problem wie den Ersteller dieses Threads.

Folgende Ausgangssituation:

Ich habe einen Ordner mit verschiedenen Dateien. Nun möchte ich mit Hilfe von 7-zip jede .txt Datei (es sind auch andere Dateitypen vorhanden) einzeln zippen.

Mit folgendem Befehl klappt das leider nicht:

FOR %%i IN ("C:\Test\*.txt") DO (
C:\Programme\7-Zip\7z.exe a -tzip "C:\\ZIP\%%~ni.zip"
)
PAUSE

In der Hilfe von 7-zip habe ich gelesen, dass man mit @liste.txt eine Liste angeben kann, bei welcher man die Dateiendungen eintragen kann. Hier noch der Auszug aus der Hilfedatei:

You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s).

For list files, 7-Zip uses UTF-8 encoding by default. You can change encoding using -scs switch.

Multiple list files are supported.

For example, if the file "listfile.txt" contains the following:

My programs\*.cpp
Src\*.cpp

then the command

7z a -tzip archive.zip @listfile.txt

adds to the archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".


Ich habe das so ausprobiert, aber 7-zip zippt mir jetzt ALLE .txt Dateien in verschiedene .zip Dateien. Ich möchte aber die Dateien einzeln zippen.

Wie muss ich hier vorgehen?

Vielen Dank für eure Antwort.
Member: Biber
Biber Feb 25, 2010 at 08:06:49 (UTC)
Goto Top
Moin KSDKSD,

Zitat von @KSDKSD:

Mit folgendem Befehl klappt das leider nicht:

FOR %%i IN ("C:\Test\*.txt") DO (
C:\Programme\7-Zip\7z.exe a -tzip "C:\\ZIP\%%~ni.zip"
)
PAUSE
"Mit folgendem Befehl klappt das leider nicht:" ist keine richtig brauchbare Fehlerbeschreibung.
Kannst du das bitte etwas umformulieren?

Ebenso dieses:
Ich habe das so ausprobiert, aber 7-zip zippt mir jetzt ALLE .txt Dateien in verschiedene .zip Dateien.
Ich möchte aber die Dateien einzeln zippen.

Bitte mal ein Beispiel mit "Diese Dateien liegen vor--> Zipfiles sollen sein..."

Ja, ich weiss, die Beschreibung des wirtschaftspolitischen Konzepts des Tigerenten-Clubs ist auch nur "Die Folgen der Krise müssen überwunden werden.".
Aber hier im Forum gilt "Wir essen zeitig." -> Also etwas konkreter bitte.

Grüße
Biber
Member: KSDKSD
KSDKSD Feb 25, 2010 at 08:12:07 (UTC)
Goto Top
Vielen Dank für deine Antwort.

Weiter unten im Text habe ich meine Antwort konkretisiert:

"Ich habe das so ausprobiert, aber 7-zip zippt mir jetzt ALLE .txt Dateien in verschiedene .zip Dateien. Ich möchte aber die Dateien einzeln zippen."

Danke für deine Antwort.

Mit dem obigen Befehl zippt 7-zip einfach ALLE Dateien in verschiedene zip-Files!
Member: Biber
Biber Feb 25, 2010 at 08:16:11 (UTC)
Goto Top
Moin KSDKSD,

danke für die schnelle Antwort,

aber ich habe es immer noch nicht begriffen...
Mach bitte mal ein Beispiel mit "Diese Dateien in den Verzeichnissen liegen vor--> Zipfiles/Ergebnisse sollen sein...in folgenden Verzeichnissen"

P.S. Denn, was mich so verwirrt, "jede Datei einzeln zippen" sollte genau das Ergebnis des Vorgänger-Problems sein... die gepostete FOR-Anweisung...

Danke
Biber
Member: KSDKSD
KSDKSD Feb 25, 2010 at 08:22:42 (UTC)
Goto Top
Keine Ursache, ich danke dir!

Also, der Ordnerinhalt sieht z.B. so aus:

test1.txt
test2.txt
text3.txt
bild1.bmp
bild2.bmp
bild3.bmp
zip (Ordner)

Mit dem obigen Befehl erstellt mir 7-Zip im Ordner zip folgende zip-Dateien:

test1.zip
test2.zip
test3.zip
bild1.zip
bild2.zip
bild3.zip

Und in jedem zip-File sind ALLE Daten des übergeordneten Ordner (auch der Ordner zip).

Mit "@liste.txt" kann man angeben, welche Dateiendungen das gezippt werden sollen! Der Inhalt meiner Datei sieht z.B. so aus:

"C:\TEST\*.txt"

D.h., dass nur Dateien mit der Endung .txt gezippt werden. Jetzt habe ich aber das Problem, dass 7-zip mir wieder folgende Ordner erstellt:

test1.zip
test2.zip
test3.zip
bild1.zip
bild2.zip
bild3.zip

Jetzt sind in jedem ZIP-File alle .txt Files!

Ich möchte aber, dass 7-zip für jede einzelne .txt Datei eine zip-Datei erstellt. Am Ende müsste es theoretisch wie folgt aussehen:

test1.zip (mit test1.txt)
test2.zip (mit test2.txt)
test3.zip (mit test3.txt)

Gruss

So, jetzt funktioniert der Befehl.

for %%i in (*.txt) do C:\Programme\7-Zip\7z.exe a c:\test\zip\%%~ni.zip %%i

Vielen Dank für eure Bemühungen und einen schönen Tag!
Member: Biber
Biber Feb 26, 2010 at 18:17:50 (UTC)
Goto Top
Moin KSDKSD,

Zitat von @KSDKSD:
So, jetzt funktioniert der Befehl.

for %%i in (*.txt) do C:\Programme\7-Zip\7z.exe a c:\test\zip\%%~ni.zip %%i

Jepp... *sichVornKoppKlatsch*
Jetzt seh ich es auch...

Vielen Dank für eure Bemühungen und einen schönen Tag!
Ebenfalls vielen Dank und schönes Wochenende.

Grüße
Biber
Member: interface31
interface31 May 09, 2022 at 10:14:45 (UTC)
Goto Top
Hi,

super sowas habe ich gesucht.
Kann ich dies noch erweitern das dies auf alle Unterordner angewendet wird?

cu