Batch-Datei mit den letzten 7 Tagen und von erhalten von schon vorhandenen Daten
Hallo, ich habe eine Frage zu einem Szenario das bei uns genutzt wird. Es werden Daten von einem Programm an ein anderes als Textdatei weitergegeben.
Um sicher zu sein, dass dabei alles richtig lief möchte ich die Textdatei gern archvieren, die vom 2. Programm gelöscht wird, wenn es alles importiert hat.
Die Batchdatei sollte folgendes leisten können:
1. Die Datei die entsteht wird in erstes in das Verzeichnis kopiert, wo das Kassensystem diese abholen soll, dabei muss es überprüfen, ob dort schon eine solche existiert und wenn ja dann anhängen
2. Dann muss es alle Sicherungen der letzten sieben Tage überprüfen und die die größer als 7 Tage sind löschen und die aktuelle als Sicherung erstellen.
Ich habe schon eine Beispieldatei im Internet gefunden, die Ähnliches macht und angepasst:
@echo off
if exist c:\zweites\import.imp TYPE ausgabe.imp >> c:\zweites\import.imp
if not exist c:\vectron\vcom.imp copy vcom.imp c:\vectron
copy ausgabe.imp 0.sik
set /a MaxFiles=7
set /a counter=0
for /f %%i in ('dir /A-d /b /o:- D *.sik') do call :loop %%i
goto end
:loop
set /a counter+=1
if %counter% GTR %MaxFiles% goto end
copy /y %%i %counter%.SIK
goto loop
:end
Probleme sind dabei, dass hier anscheinend nur Generationen gespeichert zu werden und das Datum scheint nicht berücksichtigt zu werden (also an einem Tag also auch mehrere Dateien vorkommen können). Weiterhin scheint die :End-Marke nicht so richtig zu funktionieren, denn er geht irgendwie nicht aus der Schleife raus, wenn das Kriterium erfüllt ist.
Ich hoffe ich habe nichts übersehen und wäre sehr dankbar für Hilfe, da meine DOS-Kenntnisse einige Zeit zurückliegen.
Vielen Dank
Nuker5
Um sicher zu sein, dass dabei alles richtig lief möchte ich die Textdatei gern archvieren, die vom 2. Programm gelöscht wird, wenn es alles importiert hat.
Die Batchdatei sollte folgendes leisten können:
1. Die Datei die entsteht wird in erstes in das Verzeichnis kopiert, wo das Kassensystem diese abholen soll, dabei muss es überprüfen, ob dort schon eine solche existiert und wenn ja dann anhängen
2. Dann muss es alle Sicherungen der letzten sieben Tage überprüfen und die die größer als 7 Tage sind löschen und die aktuelle als Sicherung erstellen.
Ich habe schon eine Beispieldatei im Internet gefunden, die Ähnliches macht und angepasst:
@echo off
if exist c:\zweites\import.imp TYPE ausgabe.imp >> c:\zweites\import.imp
if not exist c:\vectron\vcom.imp copy vcom.imp c:\vectron
copy ausgabe.imp 0.sik
set /a MaxFiles=7
set /a counter=0
for /f %%i in ('dir /A-d /b /o:- D *.sik') do call :loop %%i
goto end
:loop
set /a counter+=1
if %counter% GTR %MaxFiles% goto end
copy /y %%i %counter%.SIK
goto loop
:end
Probleme sind dabei, dass hier anscheinend nur Generationen gespeichert zu werden und das Datum scheint nicht berücksichtigt zu werden (also an einem Tag also auch mehrere Dateien vorkommen können). Weiterhin scheint die :End-Marke nicht so richtig zu funktionieren, denn er geht irgendwie nicht aus der Schleife raus, wenn das Kriterium erfüllt ist.
Ich hoffe ich habe nichts übersehen und wäre sehr dankbar für Hilfe, da meine DOS-Kenntnisse einige Zeit zurückliegen.
Vielen Dank
Nuker5
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 26577
Url: https://administrator.de/contentid/26577
Ausgedruckt am: 23.11.2024 um 04:11 Uhr
5 Kommentare
Neuester Kommentar
Sorry,
aber soweit meine Kenntnisse reichen, sind Batches nur hilfsmittel, die nur einfache Parameter lesen können.
Das Datum etc. kannst du mit einer höhren Sprache (Java, VB, ...) auslesen und auswerten lassen!
Weiß ja nicht, wie deine Programmierkenntnisse sind, aber sowas kann man ganz einfach in JAVA lösen!!!
Grüße
Midivirus
aber soweit meine Kenntnisse reichen, sind Batches nur hilfsmittel, die nur einfache Parameter lesen können.
Das Datum etc. kannst du mit einer höhren Sprache (Java, VB, ...) auslesen und auswerten lassen!
Weiß ja nicht, wie deine Programmierkenntnisse sind, aber sowas kann man ganz einfach in JAVA lösen!!!
Grüße
Midivirus
Moin nuker5,
Varianten zu Deiner Anforderung hatte wir hier schon ein paarmal "Dateien nach gewissem Alter löschen" oder "Alle Dateien älter als x Tage löschen". Suche mal im Bereich "Batch & Shell" bitte. Da waren einige Strategien relativ ausführlich hergeleitet.
Wie mein vorredner schon richtig schrieb - Rechnen mit Datumswerten gibt es nicht (schlechte Nachricht), aber..
- mit einem JScript- oder VBScript-Schnipsel, der meinetwegen auch vom Batch erzeugt und aufgerufen wird, ginge es.
- und es gibt ein paar mitgelieferte Utilities, die mit dem "Dateialter in Tagen" rechnen können.
Schau Dir dazu mal den XCopy-Befehl oder auch den lustigen ForFiles-Befehl an.
Abhängig von deren Möglichkeiten würde aber unter Umständen ein ganz anderer Batchablauf entstehen.
-und dritte Ausweichmöglichkeit... Du kannst natürlich auch im Batch den relativ simplen Algorithmus für "Berechne aus Datum x das Datum x-7 Tage nachbilden.
So etwas hat Kollege maneich gerade vor ein paar Tagen hier im Forum gemacht bei einer Frage "Datum vom Vortag im Batch berechnen" oder so ähnlich.
Ich würde die Strategie davon abhängig machen, wie robust und kompatibel der Batch sein soll. Und wenn der auf verschiedenen Windows-Rechnern mit verschiedenen Win-Versionen und unterschiedlichen Benutzern gestartet werden wird, dann würde ich empfehlen auf eine eigene Berechnung des "heute-vor-einer-Woche" zu verzichten und die Features von XCopy zu nutzen.
Gruß Biber
Varianten zu Deiner Anforderung hatte wir hier schon ein paarmal "Dateien nach gewissem Alter löschen" oder "Alle Dateien älter als x Tage löschen". Suche mal im Bereich "Batch & Shell" bitte. Da waren einige Strategien relativ ausführlich hergeleitet.
Wie mein vorredner schon richtig schrieb - Rechnen mit Datumswerten gibt es nicht (schlechte Nachricht), aber..
- mit einem JScript- oder VBScript-Schnipsel, der meinetwegen auch vom Batch erzeugt und aufgerufen wird, ginge es.
- und es gibt ein paar mitgelieferte Utilities, die mit dem "Dateialter in Tagen" rechnen können.
Schau Dir dazu mal den XCopy-Befehl oder auch den lustigen ForFiles-Befehl an.
Abhängig von deren Möglichkeiten würde aber unter Umständen ein ganz anderer Batchablauf entstehen.
-und dritte Ausweichmöglichkeit... Du kannst natürlich auch im Batch den relativ simplen Algorithmus für "Berechne aus Datum x das Datum x-7 Tage nachbilden.
So etwas hat Kollege maneich gerade vor ein paar Tagen hier im Forum gemacht bei einer Frage "Datum vom Vortag im Batch berechnen" oder so ähnlich.
Ich würde die Strategie davon abhängig machen, wie robust und kompatibel der Batch sein soll. Und wenn der auf verschiedenen Windows-Rechnern mit verschiedenen Win-Versionen und unterschiedlichen Benutzern gestartet werden wird, dann würde ich empfehlen auf eine eigene Berechnung des "heute-vor-einer-Woche" zu verzichten und die Features von XCopy zu nutzen.
Gruß Biber