dennisx8r
Goto Top

Textdateien mittels Batchscript automatisch in einen Ordner archivieren bzw. packen

Hallo,

ich bin gerade dabei einen Batchscript zu erstellen, das automatisch Textdatein die von einem Datentransfer erzeugt werden einließt und diese Monatsweise archiviert. Der Archivierungsprozess soll mittels 7zip erledigt werden, da dies unter der GNU-Lizens steht. Jedoch brech ich mir da mehr oder weniger die Finger bei. Wie kann ich die 7zip.exe genau ansprechen um dies durchzuführen ? Hatt evtl. jemand sowas schonmal gemacht und kann mir ne kurze starthilfe geben ? Die Textdateien liegen alle in dem Verzeichniss C:\Ferfax\Eingang und sollen mittels des Scripts monatsweise in den Ordner C:\Ferfax\Archiv archivirt werden.

Danke im vorraus

Gruß Dennis

Content-ID: 164601

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

Ausgedruckt am: 20.11.2024 um 15:11 Uhr

99045
99045 14.04.2011 um 15:52:37 Uhr
Goto Top
Hi,

wie wäre es denn, wenn du deine bisher gestellten Fragen mal mit einem abschließenden erledigt bzw. gelöst-Vermerk versiehst, bevor du neue stellst?

Gruß
dennisx8r
dennisx8r 14.04.2011 um 16:01:21 Uhr
Goto Top
Zitat von @99045:
Hi,

wie wäre es denn, wenn du deine bisher gestellten Fragen mal mit einem abschließenden erledigt bzw. gelöst-Vermerk
versiehst, bevor du neue stellst?

Gruß


erledigt, sry.
99045
99045 14.04.2011 um 16:06:55 Uhr
Goto Top
Hi,

für 7Zip gibt es eine Konsolenversion, die du dazu verwenden kannst. Die Hilfe mit den möglichen Parametern bekommst du mit 7za /?

Gruß
bastla
bastla 14.04.2011 um 19:22:22 Uhr
Goto Top
Hallo dennisx8r!

Für das Verschieben der Dateien in passende Monatsordner kannst Du etwa so vorgehen (ungetestet):
@echo off & setlocal
set "Quelle=C:\Ferfax\Eingang"  
set "Ziel=C:\Ferfax\Archiv"  
set "Typ=txt"  

for %%i in ("%Quelle%\*.%Typ%") do (  
    for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do (  
        md "%Ziel%\%%c-%%b" 2>nul  
        echo move "%%i" "%Ziel%\%%c-%%b\"  
    )
)
Durch das "echo" vor dem "move" wird das Verschieben durch Anzeige des entsprechenden Befehls vorläufig nur simuliert, die Zielordner werden aber erstellt. Wenn alles vernünftig aussieht, kannst Du dieses "echo" entfernen und den Batch im "Echtbetrieb" testen.

Danach befinden sich die Dateien in Unterordnern von %Ziel% mit dem Namensschema "JJJJ-MM".

Zum Zippen hat Dir Kaputtnick ja bereits einen Tipp gegeben - Du brauchst dann also eigentlich nur noch eine Schleife über die Unterordner von %Ziel% nach dem Muster
for /d %i in ("%Ziel%\*") do ...
Innerhalb dieser Schleife kannst Du alle im Ordner %%i befindlichen Dateien "*.%Typ%" komprimieren und nach Erfolg löschen.

Grüße
bastla
dennisx8r
dennisx8r 15.04.2011 um 09:04:18 Uhr
Goto Top
Hallo bastla,

danke erstmal. Jedoch wäre es gut wenn ich die Textdokumente zuvor auf das aktuelle Datum prüfen könnte und diese dann erst in das Verzeichniss kopiert und archiviert werden. Habe das ganze soweit auch schonmal versucht zu integreiren, jedoch komm ich irgendwie mit der %date% angabe darin nicht klar. Wie kann ich automatisch den richtigen Monat wählen, ohne das ich den script jeden monat händisch bearbeiten muss ?

in der Variablen %%C steht ja der Monat der Datei und in %%B das Jahr. Nur wie kann ich jetz über der for schleife eine bedingung machen, in der ich zuvor die Datei auf das Datum prüfe und diese dann in den dafür vorgesehen ordner kopiere.

Am besten wäre es wenn die Daten z.b von April in das Eingangsverzeichniss laufen. Am ende des monats sprich am 1. Mai würden dann alle Datein von März rauskopiert werden und ins Archiv kopiert werden, wo sie dann gepackt werden. Nach dem Packen können sie dann aus dem Eingangsverzeichniss gelöscht werden.So sind immer die Textdokumente von einem Monat zuvor in dem verzeichniss und können, falls eine Nacharbeitung nötigt ist, nochmal eingesehen werden.

Wäre um hilfe von dir sehr dankbar.

Gruß
bastla
bastla 15.04.2011 um 12:07:41 Uhr
Goto Top
Hallo dennisx8r!
in der Variablen %%C steht ja der Monat der Datei und in %%B das Jahr. Nur wie kann ich jetz über der for schleife eine bedingung machen, in der ich zuvor die Datei auf das Datum prüfe und diese dann in den dafür vorgesehen ordner kopiere.
Was meinst Du wohl macht die Zeile
echo move "%%i" "%Ziel%\%%c-%%b\"
Am besten wäre es wenn die Daten z.b von April in das Eingangsverzeichniss laufen
Wenn der Batch einmal (vorzugsweise am Monatsende) gelaufen ist, sollte es doch ohnehin keine "alten" Dateien mehr geben ...

... ansonsten kannst Du ja mit zB
set "Aktuell=%date:~-4%-%date:~-7,2%"
Jahr und Monat schon vor der Schleife in eine Variable schreiben und müsstest dann nur noch überprüfen, ob die ausgelesenen Werte (also %%c-%%b) damit übereinstimmen:
if %%c-%%b==%Aktuell% (
    echo move "%%i" "%Ziel%\Eingang\"  
) else (
    echo move "%%i" "%Ziel%\%%c-%%b\"  
)
Grüße
bastla

P.S.: Der "Niss" ist ein Ungeziefer, und sollte von "Verzeich" ferngehalten werden ... face-wink
60730
60730 15.04.2011 um 13:21:08 Uhr
Goto Top
moin,


  • Wenn du deinen Titel so abänderst, dass da irgendwo Datum 7z beinhaltet ist, würde diesen Beitrag auch jemand finden, der die suchmaschine benutzt.


Gruß
dennisx8r
dennisx8r 15.04.2011 um 14:51:36 Uhr
Goto Top
Hallo,


also momentan sieht das ganze etwas so aus. Jedoch bekomm ich beim Ausführen einen Syntax Fehler.

DIe Datumsüberprüfung wird am ende einfahc von IF not auf IF umgestellt, da ich momentan keine Daten mit älterem Erstellungsdatum zu hand ab..

Iwo ist hier der Wurm drin, kann mir da wer was zu sagen ?

set "Quelle=C:\Ferfax\Eingang"   

set "Ziel=C:\Ferfax\Archiv"   

set "Typ=txt"   

set "Aktuell=%date:~-4%-%date:~-7,2%"  

set "Zip=C:\Programme\7-Zip\7z.exe"  


for %%i in ("%Quelle%\*.%Typ%") do (   

    	   for /f "tokens=1-3 delims=. " %%a in ("%%~ti")  
            )
if NOT %%c-%%b == %Aktuell% ( 

    echo move "%%i" "%Ziel%\Eingang\"   

)else ( 

	     for %%i in ("%Quelle%\*.%Typ%")  do (  

        md "%Ziel%\%%c-%%b" 2>nul   

        move "%%i" "%Ziel%\%%c-%%b\"  )  
         )

	%Zip% a C:\Ferfax\Archiv\"%%c--%%b".7z  C:\Ferfax\Archiv\*.txt   

pause
	
60730
60730 15.04.2011, aktualisiert am 18.10.2012 um 18:46:29 Uhr
Goto Top
moin,

ich weigere mich Problemscripte mit einem führenden auch nur 1 ms anzuschauen.

Wenn die dann auch - wenns Bastla schon vorgemacht hat - ungetagged sind - dann erst recht...

Kannst du das verstehen- danke

Gruß
dennisx8r
dennisx8r 15.04.2011, aktualisiert am 18.10.2012 um 18:46:30 Uhr
Goto Top
Zitat von @60730:
moin,

ich weigere mich Problemscripte mit einem führenden auch nur
1 ms anzuschauen.

Wenn die dann auch - wenns Bastla schon vorgemacht hat - ungetagged sind - dann erst recht...

Kannst du das verstehen- danke

Gruß

habs bearbeitet - sry.
bastla
bastla 15.04.2011 um 15:09:14 Uhr
Goto Top
Hallo dennisx8r!

Wenn Du die aktuellen Dateien ohnehin im Quellordner belassen willst, könnte das so gehen (völlig ungetestet)
@echo on & setlocal
set "Quelle=C:\Ferfax\Eingang"  
set "Ziel=C:\Ferfax\Archiv"  
set "Typ=txt"  

set "Aktuell=%date:~-4%-%date:~-7,2%"  
set "Zip=C:\Programme\7-Zip\7z.exe"  
for %%i in ("%Quelle%\*.%Typ%") do (  
    for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do (  
        if not %%c-%%b==%Aktuell% (
            md "%Ziel%\%%c-%%b" 2>nul  
            move "%%i" "%Ziel%\%%c-%%b\"  
        )
    )
)
for /d %%i in ("%Ziel%\*-*") do (  
    "%Zip%" a "%Ziel%\%%~ni.7z" "%%i\*.txt"  
)
pause
Grüße
bastla

[Edit] Überzählige ")" entfernt [/Edit]
dennisx8r
dennisx8r 15.04.2011 um 16:32:54 Uhr
Goto Top
danke erstmal bastla

aber es macht ja eigentlich garkeinen sinn sie dort zu belassen.. genauso gut kann ich sie auch aus dem zip verzeichnis öffnen.. Habe das jetz mal versucht zu ändern, jedoch kann ich den Pfad von

md "%Ziel%\%%c-%%b" 2>nul   

nicht in einer variablen speicher.. Beim ausführen der Zip Zeile läuft dann alles, jedoch wird keine 7zip Datei erstellt..

wie müsste ich das jetz anpassen wenn ich die Datein innerhalb des neu erstellten ordners mit dem namen 2011-04 packen möchte, sodass am ende lediglich die Zip Datei in dem Verzeichnis liegt ?
bastla
bastla 15.04.2011 um 18:58:04 Uhr
Goto Top
Hallo dennisx8r!
aber es macht ja eigentlich garkeinen sinn sie dort zu belassen
Dann wären wir ja zurück auf dem Stand von gestern ... face-wink
@echo on & setlocal
set "Quelle=C:\Ferfax\Eingang"  
set "Ziel=C:\Ferfax\Archiv"  
set "Typ=txt"  

set "Zip=C:\Programme\7-Zip\7z.exe"  
for %%i in ("%Quelle%\*.%Typ%") do (  
    for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do (  
        md "%Ziel%\%%c-%%b" 2>nul  
        move "%%i" "%Ziel%\%%c-%%b\"  
    )
)
for /d %%i in ("%Ziel%\*-*") do (  
    "%Zip%" a "%%i\%%~ni.7z" "%%i\*.txt"  
)
pause
Das Testen überlasse ich (wie gehabt) Dir ...

Grüße
bastla