auricgoldfinger
Goto Top

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

Content-Key: 281972

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

Printed on: April 19, 2024 at 17:04 o'clock

Mitglied: 114757
Solution 114757 Sep 04, 2015 updated at 09:51:42 (UTC)
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
Member: AuricGoldfinger
AuricGoldfinger Sep 04, 2015 at 09:52:46 (UTC)
Goto Top
danke dir.

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

daher "Schuster, bleib bei deinen Leisten"

Auric