auricgoldfinger

Problem beim Datumsvergleich in Batch

Moin zusammen,

ich habe ein Problem.

Ich bekomme täglich eine Datei geliefert (immer der gleiche Name und da lässt sich auch nichts dran ändern.)

Jetzt soll diese Datei automatisch weiterverarbeitet werden. Dazu muss ich prüfen, ob die Datei vom aktuellen Tag ist.
Dazu habe ich mir folgendes geschrieben:
FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDATE=%%a%%b%%c  
for /f "tokens=1-3 delims=. " %%d in ('dir P:\sicher\bestell.exp /t:w^|findstr /i /l "bestell.exp"') do set ADATE = %%d%%e%%f  
if not %ADATE% == %CDATE% goto KLEINER
echo "Test"  
:KLEINER
echo "Hier steht dann was"  

in der Ausführung sieht es dann wie folgt aus:
C:\SQL_Statements>test1
C:\SQL_Statements>FOR /F "tokens=1,2,3,4,5 delims=/. " %a in ('date/T') do set CDATE=%a%b%c
C:\SQL_Statements>set CDATE=04092015
C:\SQL_Statements>for /F "tokens=1-3 delims=. " %d in ('dir P:\sicher\bestell.exp /t:w|findstr /i /l "bestell.exp"') do set ADATE = %d%e%f
C:\SQL_Statements>set ADATE = 03092015
"goto" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

C:\SQL_Statements>if not == 04092015 goto KLEINER


Wo liegt mein Fehler?

Danke

Auric
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 281972

Url: https://administrator.de/forum/problem-beim-datumsvergleich-in-batch-281972.html

Ausgedruckt am: 17.05.2025 um 03:05 Uhr

114757
Lösung 114757 04.09.2015 aktualisiert um 11:51:42 Uhr
Goto Top
Moin,
der Fehler ist einmal hier
set ADATE = %%d%%e%%f
Es dürfen keine Leerzeichen zwischen dem Variablennamen und dem Gleichheitszeichen stehen.
Also so
set ADATE=%%d%%e%%f 
Und zusätzlich solltest du den Vergleich im IF Teil immer mit zusätzlichen Begrenzern um die Variablen machen:
if not "%ADATE%" == "%CDATE%" goto KLEINER 
dann bekommtst du auch keinen Syntax-Fehler wenn eine der Variablen leer ist.

Gruß jodel32

p.s. An das Datum/Zeit einer Datei kommst du schneller auch so:
for %%a in (P:\sicher\bestell.exp) DO @echo %%~ta

Ich würde den Vergleich lieber per Powershell in der Batch machen:
powershell.exe -ExecutionPolicy ByPass -Command "if((get-item 'P:\sicher\bestell.exp').LastWriteTime.Date -eq (get-date).Date){'Wahr'}else{'Falsch'}"
Gruß jodel32
AuricGoldfinger
AuricGoldfinger 04.09.2015 um 11:52:46 Uhr
Goto Top
danke dir.

Mit Powershell kenne ich mich noch nicht so aus face-wink

daher "Schuster, bleib bei deinen Leisten"

Auric