l-vizz
Goto Top

Per Batch Datei in Verzeichnisse wechseln und mit 7Zip bestimmte Dateien packen und in ein Jahreszip packen.

Hallo zusammen,

folgende Ausgangslage. Ich muss per Batch-Datei in einem Verzeichnis in verschiedene Unterverzeichnisse wechseln. Dort liegen immer mal wieder Schnittstellendateien (XML oder CSV) herum. Diese müssen dann gepackt mit 7ZIP in ein ZIP Archiv (also für jedes Archive Verzeichnis eine eigene ZIP) gepackt werden (der o.g. Batch Job soll immer mal wieder laufen und die neuen Dateien hinzufügen). Manuell klappt das recht gut - automatisiert bekomme ich es einfach nicht hin.

Kurz zur Erklärung:

Es sieht grundsätzlich so aus:

d:\Schnittstelle01\Archive\datei1.xml, datei2.xml, datei3.xml, datei 4.xml...
d:\Schnittstelle02\Archive\datei1.xml, datei2.xml, datei3.xml, datei 4.xml...
d:\Schnittstelle03\Archive\datei1.xml, datei2.xml, datei3.xml, datei 4.xml...
d:\Schnittstelle04\Archive\datei1.xml, datei2.xml, datei3.xml, datei 4.xml...
d:\Schnittstelle05\Archive\datei1.csv, datei2.csv, datei3.csv, datei 4.csv...

Im Verzeichnis Archive soll nun die jeweils besagte ZIP Datei angelegt werden. Diese soll stets alle XML oder CSV Dateien aus dem Archive Verzeichnis beinhalten.
Weitere Herausforderung dabei: Am besten sollen die ZIP Dateien nach Jahren getrennt angelegt werden. Also die ZIP Datei soll nur die CSV oder XML-Dateien beinhalten, die auch im jeweiligen Jahr in den Ordner gelegt wurden. Im Folgejahr soll ein neus ZIP Archiv angelegt werden usw.

Danke!

Content-Key: 212534

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

Ausgedruckt am: 29.03.2024 um 09:03 Uhr

Mitglied: bastla
bastla 26.07.2013 um 12:18:20 Uhr
Goto Top
Hallo l-vizz und willkommen im Forum!

Poste doch mal Deinen bisherigen Batch-Ansatz und beschreibe, wo Du nicht weiter kommst ...

Grüße
bastla
Mitglied: l-vizz
l-vizz 26.07.2013 um 12:29:07 Uhr
Goto Top
Hey - danke für die Reaktion und den Willkommensgruß,

Ich bin nicht wirklich weit gekommen. Aktuell versuche ich mit "Grundansätzen" wie
for /f %%a IN ('dir /b /s *.xml *.csv') do call "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" %%a

Irgendwie durch die Verzeichnisse zu laufen. Da ich aber absolut nie was groß mit der Konsole gemacht habe, krankt das leider schon im Ansatz face-sad

Ich habe auch schon versucht mit dir /s > dateien.txt u.ä. alle Dateien im Verzeichnis wegzuschreiben und dann später irgendwie auszulesen. Aber das ist mir auch nicht gelungen - bzw. ich kam einfach nicht weiter.
Mitglied: Endoro
Endoro 26.07.2013 um 13:09:54 Uhr
Goto Top
Hi,
mal ein Vorschlag, kenne aber 7z nicht:
for /r "D:\" %%a in (*.xml *.csv) do (  
    echo(%%~a
    rem lieber 7z pack mal die Datei "%%~a" in das Archiv "xyz.zip"  
)
lg
Mitglied: bastla
bastla 26.07.2013 aktualisiert um 13:29:18 Uhr
Goto Top
... und soferne das Änderungsdatum für die Zuordnung zu einem passenden "Jahres"-Archiv genügt, ließe sich mit
for /r "D:\Schnittstelle01" %%a in (*.xml *.csv) do (  
    for /f "tokens=1-3 delims=. " %%i in ("%%~ta") do (  
        echo "%%a" aus dem Jahr %%k  
        rem lieber 7z pack mal die Datei "%%a" in das Archiv "%%k_xyz.zip"  
    )
)
auch die .zip-Datei gezielter ansprechen ...

Um automatisiert nur die "D:\Schnittstelle*"-Ordner abzuarbeiten, böte sich noch ein "for /d" außen rum an ...

Grüße
bastla
Mitglied: l-vizz
l-vizz 26.07.2013 aktualisiert um 13:29:35 Uhr
Goto Top
@Endoro:
Hey - Danke für den Tipp.
Ich schaue mir das mal an - aber auf den ersten Blick sieht das so aus, als würde der Job nur durch die Verzeichnisse laufen uns alles packen. Wohl aber nicht nach Jahren sortiert.
Irgendwie müsste ich ja eine Variable anlegen, diese mit dem aktuellen Jahr befüllen (wie auch immer?). dann die Verzeichnisse ähnlich oben durchlaufen,den Parameter als Jahr für den Dateinamen.zip angeben und dann noch darauf achten, dass alle Dateien auch ein Änderungsdatum bzw. Anlagedatum aus diesem Jahr haben
EDIT: Ergebnis ist wie folgt. Er läuft durch, packt alles (nicht nur XML und CSV) und packt das alles in ein einiziges ZIP. Also leider nicht ausreichend face-sad.

@bastla: Schaue ich mir an - Danke. Mal gucken wie weit ich komme face-smile
Mitglied: l-vizz
l-vizz 26.07.2013 um 13:40:40 Uhr
Goto Top
@bastla:

Es sieht nun so aus:

for /r "C:\Users\test\Desktop\test_zipping\test\schnittstelle01" %%a in (*.xml *.csv) do (
for /f "tokens=1-3 delims=. " %%i in ("%%~ta") do (
echo "%%a" aus dem Jahr %%k
call "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" %%a %%k_test.zip
)
)

Allerdings kommt folgende Fehlermeldung auf der Konsole:

C:\Users\test\Desktop\test_zipping\test>(
echo "C:\Users\test\Desktop\test_zipping\test\schnittstelle01\testdokument.xm
l" aus dem Jahr 2013
call "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" C:\Users\test\Deskt
op\test_zipping\test\schnittstelle01\testdokument.xml 2013_test.zip
)
"C:\Users\test\Desktop\test_zipping\test\schnittstelle01\testdokument.xml" au
s dem Jahr 2013

7-Zip 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18


Error:
Incorrect command line

Hast Du noch irgendeine Idee? Danke!
Mitglied: bastla
bastla 26.07.2013 aktualisiert um 13:49:52 Uhr
Goto Top
Hallo l-vizz!
Hast Du noch irgendeine Idee?
Die Idee, Dir einmal die Commandline-Optionen von "7zip" anzusehen - zur Not einfach mit
"C:\Users\test\Desktop\test_zipping\7zip\7z.exe" -?
- solltest Du eigentlich schon selbst gehabt haben ...

BTW: Ein "call" ist hier unnötig.

Grüße
bastla

P.S.: Verwende bitte für Batch-Schnipsel "Code"-Formatierung ...
Mitglied: l-vizz
l-vizz 26.07.2013 aktualisiert um 13:54:59 Uhr
Goto Top
Die hatte ich - ein "a" zum "add to archive" hat leider bisher auch nicht abgeholfen. Daher dachte ich, es hätte ggf. eine andere Ursache.
Da sieht aber schon recht rund raus. Danke nochmals...

In der tat - ich habe mich nur zu blöd angestellt und die Parameter vertauscht. 1000x gemacht - mich aber vom Kontext verwirren lassen.
Aktuell habe ich jetzt noch das Thema, dass er nur eine Datei packt. Aber das bekomme ich hoffentlich noch hin.
Mitglied: bastla
bastla 26.07.2013 aktualisiert um 13:51:14 Uhr
Goto Top
Hallo l-vizz!
ein "a" zum "add to archive" hat leider bisher auch nicht abgeholfen
Und wenn Du auch noch die Parameter in der richtigen Reihenfolge angibst?

Grüße
bastla
Mitglied: l-vizz
l-vizz 26.07.2013 aktualisiert um 14:04:46 Uhr
Goto Top
Richtig, ja. Wie kurz vorher geschrieben habe ich die Parameter vertauscht - mich aber dann verwirren lassen durch die Angaben von Dir oben.

Aktuell ist noch ein Haken an der Sache. Er packt mir nur eine einzige Datei ins Archiv. Da bin ich gerade noch auf Fehlersuche.

EDIT: Es lag an haarigen Zeichen in Dateinamen. Das ist nun aus der Welt.
Mitglied: l-vizz
l-vizz 26.07.2013 aktualisiert um 14:16:13 Uhr
Goto Top
Eine Frage habe ich noch offen - es klappt soweit prima. Danke bis hierhin.
Die ZIP Datei wird korrekt erstellt. Alle Dateien sind enthalten. Aktuell sieht es so aus (call wieder entfernt)
for /r "C:\Users\test\Desktop\test_zipping\test\" %%a in (*.xml *.csv) do (   
    for /f "tokens=1-3 delims=. " %%i in ("%%~ta") do (   
        echo "%%a" aus dem Jahr %%k   
        "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a %%k_test.zip %%a   
    ) 
)
Das Problem ist, dass mir die Pfadangaben dabei verloren gehen. Sprich: Wenn ich die Dateien wieder entpacken möchte, habe ich natürlich nicht mehr die Information zu welcher Schnittstelle, welche Datei gehörte. Das ist wahrscheinlich durch den Schleifendurchlauf eliminiert. Gibt es da eine Chance? Ansonsten muss ich die Schnittstellendateien einfach vorher umbenennen in etwas "sprechendes".

Bzw. es ist nicht genau das, was ich mir erhofft hatte. Das Skript packt ja alle Dateien in ein ZIP - es sollen aber pro Schnittstelle eine Datei erzeugt werden. Das ist aber wahrscheinlich das, was Du oben meintest, oder? Also mit dem "for /d" außen rum?
Mitglied: bastla
bastla 26.07.2013 aktualisiert um 14:27:59 Uhr
Goto Top
Hallo l-vizz!
Das ist wahrscheinlich durch den Schleifendurchlauf eliminiert.
Eigentlich nicht - Du solltest ja in Zeile 3 den vollständigen Pfad ausgegeben bekommen (zur Sicherheit könntest Du noch "%%~fa" anstelle von "%%a" verwenden).
Das Skript packt ja alle Dateien in ein ZIP - es sollen aber pro Schnittstelle eine Datei erzeugt werden. Das ist aber wahrscheinlich das, was Du oben meintest, oder? Also mit dem "for /d" außen rum?
Yep.

Grüße
bastla
Mitglied: l-vizz
l-vizz 26.07.2013 um 14:36:49 Uhr
Goto Top
Das sieht besser aus mit dem "%%~fa" - Danke!

Ich muss mir gleich mal ergoogeln was das eigentlich im Detail bedeutet. Da bin ich noch nicht hintergestiegen.

Bzgl. des "for /d" außen - wie genau muss das aussehen?

for /d "C:\Users\test\Desktop\test_zipping\test\Schnittstelle*" do (  
...
)

Scheint wohl nicht zu klappen. Kannst Du mir da nochmal (hoffentlich das letzte mal) auf die Sprünge helfen?
Danke!
Mitglied: bastla
bastla 26.07.2013 um 15:07:35 Uhr
Goto Top
Hallo l-vizz!
Ich muss mir gleich mal ergoogeln was das eigentlich im Detail bedeutet.
Schau Dir einmal "for /?" (vor allem gegen Ende) an ...

Die Schleife benötigt natürlich auch eine Variable, in welcher sich dann bei jedem Durchlauf der Pfad zum Ordner befindet:
for /d %%o in ("C:\Users\test\Desktop\test_zipping\test\Schnittstelle*") do (  
    echo Bearbeite Ordner "%%o"  
)
Grüße
bastla
Mitglied: l-vizz
l-vizz 26.07.2013 aktualisiert um 16:08:39 Uhr
Goto Top
Besten Dank. Das funktioniert soweit. Ich habe allerdings immer noch das Ergebnis, dass nach Ablauf des Skriptes nur eine ZIP Datei da ist. Diese liegt dort, wo auch die Batch Datei liegt.

Die jeweiligen Schnittstellenverzeichnisse haben jedoch keine "eigene" ZIP Datei. Und da muss meine Reise ja hingehen. Der aktuelle Stand des Skriptes bewerkstelligt dies noch nicht.

Hier noch einmal der aktuelle Stand:

@echo off 
for /d %%o in ("C:\Users\test\Desktop\test_zipping\test\schnittstelle*") do (   
@echo Bearbeite Ordner "%%o"   
for /r "C:\Users\test\Desktop\test_zipping\test\" %%a in (*.xml *.csv) do (   
    for /f "tokens=1-3 delims=. " %%i in ("%%~ta") do (   
        @echo "%%a" aus dem Jahr %%k   
        "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a %%k_test.zip %%a   
    ) 
))
Mitglied: bastla
bastla 26.07.2013 um 17:32:56 Uhr
Goto Top
Hallo l-vizz!

Du vergibst ja auch nur einen Namen, aber keinen Pfad für die .zip-Datei - daher eher so:
@echo off 
for /d %%o in ("C:\Users\test\Desktop\test_zipping\test\schnittstelle*") do (   
    echo Bearbeite Ordner "%%o"  
    for /r "%%o" %%a in (*.xml *.csv) do (   
        for /f "tokens=1-3 delims=. " %%i in ("%%~ta") do (   
            echo "%%a" aus dem Jahr %%k   
            "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "%%~o\%%k_test.zip" %%a   
        )
    )
)
Grüße
bastla
Mitglied: l-vizz
l-vizz 29.07.2013 aktualisiert um 10:14:13 Uhr
Goto Top
Danke - ich steige so langsam durch die Logik durch, schätze ich.

Allerdings kommt es zu folgendem Effekt. In der Konsole erscheint nun:
C:\Users\test\Desktop\test_zipping\test>packen
Bearbeite Ordner "C:\Users\test\Desktop\test_zipping\test\schnittstelle01"
Bearbeite Ordner "C:\Users\test\Desktop\test_zipping\test\schnittstelle02"

=> Also das Skript erkennt die Schnittstellen-Verzeichnisse - aber es packt nicht (mehr) face-sad Also das rasselt einfach so durch. Hast du da noch eine Ahnung was das sein könnte? Ich finde leider keinen Ansatz. Springt das Skript aus irgendeinem Grund vielleicht nicht mehr in die "innere" For-Schleife? Es sieht zumindest stark danach aus, denn neben dem ausbleibenden Packen, steht ja auch nicht mehr das echo von
echo "%%a" aus dem Jahr %%k    
da.
Danke!
Mitglied: bastla
bastla 29.07.2013 um 10:04:58 Uhr
Goto Top
Hallo l-vizz!

Ändere Zeile 4 auf
for /r "%%~fo" %%a in (*.xml *.csv) do (
Wenn Du zusätzlich in Zeile 1
echo on
verwendest, werden alle Befehle vor der Ausführung angezeigt - so kannst Du leichter nachvollziehen, was der Batch macht (oder eben nicht) ...

Grüße
bastla
Mitglied: l-vizz
l-vizz 29.07.2013 um 10:14:00 Uhr
Goto Top
Besten dank für die super schnelle Hilfe. Ich werde nachdem es läuft mir das alles mal genau aneignen. Leider war es das aber immer noch nicht. Es tut sich zwar was - aber es kommt nicht wirklich eine Ausgabe. So sieht es im Moment aus:
@echo on  
for /d %%o in ("C:\Users\test\Desktop\test_zipping\test\*") do (    
	echo Bearbeite Ordner "%%o"    
			for /r "%%~fo" %%a in (*.xml *.csv) do (  
				for /f "tokens=1-3 delims=. " %%i in ("%%~ta") do (    
					echo "%%a" aus dem Jahr %%k    
					"C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "%%~o\%%k_test.zip" %%a    
				) 
			) 
)

Die Ausgabe auf der Konsole sieht so aus:
C:\Users\test\Desktop\test_zipping\test>for / %o in ("C:\Users\test\Desp\test_zipping\test\*") do (
echo Bearbeite Ordner "%o"
for /R "%~fo" %a in (*.xml *.csv) do (for /F "tokens=1-3 delims=. " %i in ("
a") do (
echo "%a" aus dem Jahr %k
"C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "%~o\%k_test.zip" %a
) )
)

C:\Users\test\Desktop\test_zipping\test>(
echo Bearbeite Ordner "C:\Users\test\Desktop\test_zipping\test\schnittstel
1"
for /R "%~fo" %a in (*.xml *.csv) do (for /F "tokens=1-3 delims=. " %i in ("
a") do (
echo "%a" aus dem Jahr %k
"C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\Desk
\test_zipping\test\schnittstelle01\%k_test.zip" %a
) )
)
Bearbeite Ordner "C:\Users\test\Desktop\test_zipping\test\schnittstelle01"

C:\Users\test\Desktop\test_zipping\test>(
echo Bearbeite Ordner "C:\Users\test\Desktop\test_zipping\test\schnittstel
2"
for /R "%~fo" %a in (*.xml *.csv) do (for /F "tokens=1-3 delims=. " %i in ("
a") do (
echo "%a" aus dem Jahr %k
"C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\Desk
\test_zipping\test\schnittstelle02\%k_test.zip" %a
) )
)
Bearbeite Ordner "C:\Users\test\Desktop\test_zipping\test\schnittstelle02"

Ergebnis sind leider weiterhin keine Zip Dateien. Die Konsole schmeisst leider keine Fehlermeldung face-sad
Mitglied: l-vizz
l-vizz 29.07.2013 aktualisiert um 12:26:13 Uhr
Goto Top
Ich sehe gerade, dass oben hinter dem "for" nur ein "/" in der Konsole ausgegeben wird. Wie Du aber im Code siehst, ist da aber alles eingetragen.
Kann es sein, dass 7z einfach nicht die Dateien übergeben bekommt und daher nichts passiert?
Mitglied: bastla
bastla 29.07.2013 aktualisiert um 14:51:52 Uhr
Goto Top
Hallo l-vizz!

Versuch's mal damit:
@echo off
for /d %%o in ("C:\Users\test\Desktop\test_zipping\test\schnittstelle*") do call :ProcessDir "%%o"  
goto :eof

:ProcessDir
echo Bearbeite Ordner %1
for /r %1 %%a in (*.xml *.csv *.txt) do (
    for /f "tokens=1-3 delims=. " %%i in ("%%~ta") do (  
        echo "%%a" aus dem Jahr %%k  
        "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "%~1\%%k_test.zip" %%a  
    )
)
goto :eof
Grüße
bastla

[Edit] "Test-echo" entfernt [/Edit]
Mitglied: l-vizz
l-vizz 29.07.2013 um 13:25:16 Uhr
Goto Top
Hey Bastla,

leider auch kein Erfolg. Der Prozess dauert maximal eine Sekunde - dann ist das cmd prompt voll mit folgender Ausgabe (leider viel) - offensichtlich wird alles gefunden und durchlaufen, aber nicht gezipped. 7zip liegt im richtigen Verzeichnis (das Skript beklagt sich ja auch nicht darüber).


C:\Users\test\Desktop\test_zipping\test>packen

C:\Users\test\Desktop\test_zipping\test>for / %o in ("C:\Users\test\Deskto
p\test_zipping\test\schnittstelle*") do call :ProcessDir "%o"

C:\Users\test\Desktop\test_zipping\test>call :ProcessDir "C:\Users\test\De
sktop\test_zipping\test\schnittstelle01"

C:\Users\test\Desktop\test_zipping\test>echo Bearbeite Ordner "C:\Users\mheid
er\Desktop\test_zipping\test\schnittstelle01"
Bearbeite Ordner "C:\Users\test\Desktop\test_zipping\test\schnittstelle01"

C:\Users\test\Desktop\test_zipping\test>for /R "C:\Users\test\Desktop\test
_zipping\test\schnittstelle01" %a in (*.xml *.csv *.txt) do (for /F "tokens=1-3
delims=. " %i in ("%~ta") do (
echo "%a" aus dem Jahr %k
echo "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "%~o\%k_test.zip" %a

) )

C:\Users\test\Desktop\test_zipping\test>(for /F "tokens=1-3 delims=. " %i in
("26.07.2013 11:34") do (
echo "C:\Users\test\Desktop\test_zipping\test\schnittstelle01\testdokument.xm
l" aus dem Jahr %k
echo "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\De
sktop\test_zipping\test\schnittstelle01\%k_test.zip" C:\Users\test\Desktop\te
st_zipping\test\schnittstelle01\testdokument.xml
) )

C:\Users\test\Desktop\test_zipping\test>(
echo "C:\Users\test\Desktop\test_zipping\test\schnittstelle01\testdokument.xm
l" aus dem Jahr 2013
echo "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\De
sktop\test_zipping\test\schnittstelle01\2013_test.zip" C:\Users\test\Desktop\
test_zipping\test\schnittstelle01\testdokument.xml
)
"C:\Users\test\Desktop\test_zipping\test\schnittstelle01\testdokument.xml" au
s dem Jahr 2013
"C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\Desktop\
test_zipping\test\schnittstelle01\2013_test.zip" C:\Users\test\Desktop\test_z
ipping\test\schnittstelle01\testdokument.xml

C:\Users\test\Desktop\test_zipping\test>(for /F "tokens=1-3 delims=. " %i in
("26.07.2013 11:34") do (
echo "C:\Users\test\Desktop\test_zipping\test\schnittstelle01\testdokument2.x
ml" aus dem Jahr %k
echo "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\De
sktop\test_zipping\test\schnittstelle01\%k_test.zip" C:\Users\test\Desktop\te
st_zipping\test\schnittstelle01\testdokument2.xml
) )

C:\Users\test\Desktop\test_zipping\test>(
echo "C:\Users\test\Desktop\test_zipping\test\schnittstelle01\testdokument2.x
ml" aus dem Jahr 2013
echo "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\De
sktop\test_zipping\test\schnittstelle01\2013_test.zip" C:\Users\test\Desktop\
test_zipping\test\schnittstelle01\testdokument2.xml
)
"C:\Users\test\Desktop\test_zipping\test\schnittstelle01\testdokument2.xml" a
us dem Jahr 2013
"C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\Desktop\
test_zipping\test\schnittstelle01\2013_test.zip" C:\Users\test\Desktop\test_z
ipping\test\schnittstelle01\testdokument2.xml

C:\Users\test\Desktop\test_zipping\test>(for /F "tokens=1-3 delims=. " %i in
("26.07.2013 11:34") do (
echo "C:\Users\test\Desktop\test_zipping\test\schnittstelle01\testdokument3.x
ml" aus dem Jahr %k
echo "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\De
sktop\test_zipping\test\schnittstelle01\%k_test.zip" C:\Users\test\Desktop\te
st_zipping\test\schnittstelle01\testdokument3.xml
) )

C:\Users\test\Desktop\test_zipping\test>(
echo "C:\Users\test\Desktop\test_zipping\test\schnittstelle01\testdokument3.x
ml" aus dem Jahr 2013
echo "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\De
sktop\test_zipping\test\schnittstelle01\2013_test.zip" C:\Users\test\Desktop\
test_zipping\test\schnittstelle01\testdokument3.xml
)
"C:\Users\test\Desktop\test_zipping\test\schnittstelle01\testdokument3.xml" a
us dem Jahr 2013
"C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\Desktop\
test_zipping\test\schnittstelle01\2013_test.zip" C:\Users\test\Desktop\test_z
ipping\test\schnittstelle01\testdokument3.xml

C:\Users\test\Desktop\test_zipping\test>(for /F "tokens=1-3 delims=. " %i in
("26.07.2013 11:34") do (
echo "C:\Users\test\Desktop\test_zipping\test\schnittstelle01\testdokument4.x
ml" aus dem Jahr %k
echo "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\De
sktop\test_zipping\test\schnittstelle01\%k_test.zip" C:\Users\test\Desktop\te
st_zipping\test\schnittstelle01\testdokument4.xml
) )

C:\Users\test\Desktop\test_zipping\test>(
echo "C:\Users\test\Desktop\test_zipping\test\schnittstelle01\testdokument4.x
ml" aus dem Jahr 2013
echo "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\De
sktop\test_zipping\test\schnittstelle01\2013_test.zip" C:\Users\test\Desktop\
test_zipping\test\schnittstelle01\testdokument4.xml
)
"C:\Users\test\Desktop\test_zipping\test\schnittstelle01\testdokument4.xml" a
us dem Jahr 2013
"C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\Desktop\
test_zipping\test\schnittstelle01\2013_test.zip" C:\Users\test\Desktop\test_z
ipping\test\schnittstelle01\testdokument4.xml

C:\Users\test\Desktop\test_zipping\test>goto :eof

C:\Users\test\Desktop\test_zipping\test>call :ProcessDir "C:\Users\test\De
sktop\test_zipping\test\schnittstelle02"

C:\Users\test\Desktop\test_zipping\test>echo Bearbeite Ordner "C:\Users\mheid
er\Desktop\test_zipping\test\schnittstelle02"
Bearbeite Ordner "C:\Users\test\Desktop\test_zipping\test\schnittstelle02"

C:\Users\test\Desktop\test_zipping\test>for /R "C:\Users\test\Desktop\test
_zipping\test\schnittstelle02" %a in (*.xml *.csv *.txt) do (for /F "tokens=1-3
delims=. " %i in ("%~ta") do (
echo "%a" aus dem Jahr %k
echo "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "%~o\%k_test.zip" %a

) )

C:\Users\test\Desktop\test_zipping\test>(for /F "tokens=1-3 delims=. " %i in
("26.07.2013 11:34") do (
echo "C:\Users\test\Desktop\test_zipping\test\schnittstelle02\testdokument.cs
v" aus dem Jahr %k
echo "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\De
sktop\test_zipping\test\schnittstelle02\%k_test.zip" C:\Users\test\Desktop\te
st_zipping\test\schnittstelle02\testdokument.csv
) )

C:\Users\test\Desktop\test_zipping\test>(
echo "C:\Users\test\Desktop\test_zipping\test\schnittstelle02\testdokument.cs
v" aus dem Jahr 2013
echo "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\De
sktop\test_zipping\test\schnittstelle02\2013_test.zip" C:\Users\test\Desktop\
test_zipping\test\schnittstelle02\testdokument.csv
)
"C:\Users\test\Desktop\test_zipping\test\schnittstelle02\testdokument.csv" au
s dem Jahr 2013
"C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\Desktop\
test_zipping\test\schnittstelle02\2013_test.zip" C:\Users\test\Desktop\test_z
ipping\test\schnittstelle02\testdokument.csv

C:\Users\test\Desktop\test_zipping\test>(for /F "tokens=1-3 delims=. " %i in
("26.07.2013 11:34") do (
echo "C:\Users\test\Desktop\test_zipping\test\schnittstelle02\testdokument2.c
sv" aus dem Jahr %k
echo "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\De
sktop\test_zipping\test\schnittstelle02\%k_test.zip" C:\Users\test\Desktop\te
st_zipping\test\schnittstelle02\testdokument2.csv
) )

C:\Users\test\Desktop\test_zipping\test>(
echo "C:\Users\test\Desktop\test_zipping\test\schnittstelle02\testdokument2.c
sv" aus dem Jahr 2013
echo "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\De
sktop\test_zipping\test\schnittstelle02\2013_test.zip" C:\Users\test\Desktop\
test_zipping\test\schnittstelle02\testdokument2.csv
)
"C:\Users\test\Desktop\test_zipping\test\schnittstelle02\testdokument2.csv" a
us dem Jahr 2013
"C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\Desktop\
test_zipping\test\schnittstelle02\2013_test.zip" C:\Users\test\Desktop\test_z
ipping\test\schnittstelle02\testdokument2.csv

C:\Users\test\Desktop\test_zipping\test>(for /F "tokens=1-3 delims=. " %i in
("26.07.2013 11:34") do (
echo "C:\Users\test\Desktop\test_zipping\test\schnittstelle02\testdokument3.c
sv" aus dem Jahr %k
echo "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\De
sktop\test_zipping\test\schnittstelle02\%k_test.zip" C:\Users\test\Desktop\te
st_zipping\test\schnittstelle02\testdokument3.csv
) )

C:\Users\test\Desktop\test_zipping\test>(
echo "C:\Users\test\Desktop\test_zipping\test\schnittstelle02\testdokument3.c
sv" aus dem Jahr 2013
echo "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\De
sktop\test_zipping\test\schnittstelle02\2013_test.zip" C:\Users\test\Desktop\
test_zipping\test\schnittstelle02\testdokument3.csv
)
"C:\Users\test\Desktop\test_zipping\test\schnittstelle02\testdokument3.csv" a
us dem Jahr 2013
"C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\Desktop\
test_zipping\test\schnittstelle02\2013_test.zip" C:\Users\test\Desktop\test_z
ipping\test\schnittstelle02\testdokument3.csv

C:\Users\test\Desktop\test_zipping\test>(for /F "tokens=1-3 delims=. " %i in
("26.07.2013 11:34") do (
echo "C:\Users\test\Desktop\test_zipping\test\schnittstelle02\testdokument4.c
sv" aus dem Jahr %k
echo "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\De
sktop\test_zipping\test\schnittstelle02\%k_test.zip" C:\Users\test\Desktop\te
st_zipping\test\schnittstelle02\testdokument4.csv
) )

C:\Users\test\Desktop\test_zipping\test>(
echo "C:\Users\test\Desktop\test_zipping\test\schnittstelle02\testdokument4.c
sv" aus dem Jahr 2013
echo "C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\De
sktop\test_zipping\test\schnittstelle02\2013_test.zip" C:\Users\test\Desktop\
test_zipping\test\schnittstelle02\testdokument4.csv
)
"C:\Users\test\Desktop\test_zipping\test\schnittstelle02\testdokument4.csv" a
us dem Jahr 2013
"C:\Users\test\Desktop\test_zipping\7zip\7z.exe" a "C:\Users\test\Desktop\
test_zipping\test\schnittstelle02\2013_test.zip" C:\Users\test\Desktop\test_z
ipping\test\schnittstelle02\testdokument4.csv

C:\Users\test\Desktop\test_zipping\test>goto :eof

C:\Users\test\Desktop\test_zipping\test>goto :eof

C:\Users\test\Desktop\test_zipping\test>
Mitglied: bastla
bastla 29.07.2013 um 14:53:16 Uhr
Goto Top
Hallo l-vizz!

Sorry - da war noch ein "echo" vom Testen in Zeile 10 - ist jetzt weg ...

Grüße
bastla
Mitglied: l-vizz
l-vizz 29.07.2013 um 15:28:50 Uhr
Goto Top
Jetzt wird's aber langsam echt peinlich für mich! Danke! Klappt!! Echt super der lange Support von Dir.

Ich lasse das jetzt mal auf die Echtdaten los und hoffe, dass das reibungslos funktioniert. Mache mich jetzt mal was schlau, was da z.T. oben passiert.
Soweit ist mir alles klar - bis auf die Zeile:

 for /f "tokens=1-3 delims=. " %%i in ("%%~ta") do (   

Aber da werde ich auch noch durchsteigen.
Besten Dank nochmals!
Mitglied: bastla
bastla 29.07.2013 um 15:37:45 Uhr
Goto Top
Hallo l-vizz!

So wild ist das mit der angesprochenen Zeile eigentlich nicht - lässt sich leicht nachvollziehen, wenn Du das nur für eine Datei versuchst - direkt in der CMD-Shell zB so:
for %a in ("C:\Users\test\Desktop\test_zipping\test\schnittstelle01\testdokument.xml") do for /f "tokens=1-3 delims=. " %i in ("%~ta") do @echo %i_%j_%k
Grüße
bastla
Mitglied: l-vizz
l-vizz 30.07.2013 um 16:16:42 Uhr
Goto Top
Ich habe dein Skript noch ein bisschen "angepasst" für mich. Nur ein paar Feinheiten für die Produktivumgebung (Pfade durch Variablen ersetzt, gepackte Dateien löschen, usw.).

Es funktioniert wirklich vorzüglich. Und 7zip bietet ein prima Möglichkeit über Parameter auszusteuern, dass die gepackten ZIPs nochmal gepackt werden (neben XML und CSV-Dateien werden auch einige Schnittstellen als ZIPs geliefert). Das Skript läuft ja mehrmals - und so passierte es anfangs, dass die Dateien nochmal gepackt wurden. Also noch einmal vielen Dank! Astrein.

Ich versuche noch diese Zeile zu verstehen:
for /f "tokens=1-3 delims=. " %%i in ("%%~ta") do (  

for / f bedeutet ja, dass die for-Schleife auf Dateien achten soll
tokens sind sozusagen meine "Strings" zwischen den delims (also in diesen Fällen die "." zwischen der Datumsangabe. Soweit, hoffe ich, habe ich es verstanden.
Was ich nicht verstehe ist die 1-3. Wenn ich einfach einmal "dir" im Verzeichnis schreibe, dann sieht ein Schnittstellenverzeichnis ja eigentlich so aus:
23.07.2013 14:32 514.377 ZRE_Z01_20130723_143114.ZIP
usw.
Da sehe ich nur 2 Punkte...
Oder anders: Wie schaffst Du es mit dem Skript oben die "2013" zu extrahieren.
Und zudem - was bedeutet die "~" Tilde bei "ta".

Du siehst - ich steige noch nicht richtig durch, würde es aber gerne verstehen. Also falls Du nochmal Zeit hast, wäre das als Abschluss prima. Deine Hilfe im vorigen Post hat mich leider noch nicht wirklich erhellt.

Danke!
Mitglied: bastla
bastla 30.07.2013 aktualisiert um 16:55:21 Uhr
Goto Top
Hallo l-vizz!

Anhand Deines Beispiels
23.07.2013 14:32 514.377 ZRE_Z01_20130723_143114.ZIP
sähe das so aus: Zunächst gibt es die äußere Schleife, die dafür sorgt, dass mit "%%a" die Datei angesprochen wird. Das ermöglicht, mit "%%~ta" das Änderungsdatum (23.07.2013 14:32) der Datei zu erhalten (siehe dazu "for /?" ziemlich am Ende - ich merke gerade, ich wiederhole mich face-wink).

Die von Dir angesprochene innere Schleife erhält nun diesen Timestamp (wegen der Anführungszeichen wird "%%~ta" nicht als Verweis auf eine Datei, sondern als Text interpretiert) zur Verarbeitung und macht nix anderes, als anhand der Delimiter Punkt und Leerzeichen den String zu zerlegen - es steht dann in "%%i" der Tag (23), in "%%j" die Monatsangabe (07) und in "%%k" die Jahreszahl (2013). Damit Jahr und Uhrzeit voneinander getrennt werden, wurde auch das Leerzeichen als Trennzeichen ("delimiter") festgelegt.
Wenn Du Dich noch ausführlicher mit der Thematik beschäftigen möchtest, sei Dir Friemlers "Tutorial zur FOR-Schleife" ans Herz gelegt ...

Grüße
bastla