nuker5
Goto Top

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

Content-ID: 26577

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

Ausgedruckt am: 23.11.2024 um 04:11 Uhr

Midivirus
Midivirus 21.02.2006 um 15:48:27 Uhr
Goto Top
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
Nuker5
Nuker5 21.02.2006 um 16:22:36 Uhr
Goto Top
Mit der Batch-Datei kann man das Datum auslesen und es funktioniert auch.
@echo off
::Format JJMMTT
dir *.SIK > file.dat
for /F "tokens=1,2,3 delims=. " %%i in ('findstr SIK file.dat') do call :SUB1 %%i %%j %%k
goto ENDE
:SUB1
set TEMPVAR=%3
set TEMPVAR=%TEMPVAR:~2,2%
set TEMPVAR=%TEMPVAR%%2%1
echo %TEMPVAR%
:ENDE
pause


Tjaaa, aber wie in das große ganze integrieren?

Grüße

Nuker5
Nuker5
Nuker5 21.02.2006 um 16:22:39 Uhr
Goto Top
Mit der Batch-Datei kann man das Datum auslesen und es funktioniert auch.
@echo off
::Format JJMMTT
dir *.SIK > file.dat
for /F "tokens=1,2,3 delims=. " %%i in ('findstr SIK file.dat') do call :SUB1 %%i %%j %%k
goto ENDE
:SUB1
set TEMPVAR=%3
set TEMPVAR=%TEMPVAR:~2,2%
set TEMPVAR=%TEMPVAR%%2%1
echo %TEMPVAR%
:ENDE
pause


Tjaaa, aber wie in das große ganze integrieren?

Grüße

Nuker5
Biber
Biber 21.02.2006 um 19:10:34 Uhr
Goto Top
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
Nuker5
Nuker5 22.02.2006 um 14:38:21 Uhr
Goto Top
Danke Biber,

ich versuch mich mal an die XCOPY-Variante oder die Berechnen von Tag x-7

Viele Grüße

Nuker5