FTP Datum mit lokalem Datum abgleichen
Hallo Leutz!
Ich habe folgende Herausforderung zu bewaeltigen.
Ich habe ein FTP-Script erstellt, welches mir mit Hilfe des DIR-Befehls eine Verzeichnisliste vom FTP holt und in eine Logdatei (connect.log) schreibt. Nun muss ich ueberpruefen, ob Dateien auf dem FTP-Server liegen. Das ist kein Problem, ich ueberpruefe das Log-File auf den Namen jeweiligen der Datei. Nun ist allerdings ein Problem aufgetreten das ich nicht geloest bekomme.
Das Problem wurde zwar im Forum schon einmal aufgegriffen allerdings nicht in dieser Form.
https://www.administrator.de/index.php?content=57137
Das Problem:
Mit dem DIR-Befehl bekomme ich ja eine Uebersicht der gesamten Verzeichnisstruktur z.B. vom Ordner "share". In diesem werden Tag fuer Tag neue Dateien abgelegt. Der DIR-Befehl gibt zwar das Datum mit an allerdings in der Form "<UHRZEIT> <13> <Aug>". Lokal (unter Windows) gibt %date% /t allerdings "13.08.2009" aus.
Meine Frage daher.
Wie kann ich das FTP-Datum (welches in connect.log steht) mit dem lokalen Datum vergleichen.
Ich habe mir dazu schon einige Gedanken gemacht, allerdings komme ich damit zu keinem Erfolg und wirklich gut ist es auch nicht.
Hier meine bat:
Ich hoffe ihr koennt mir bei dem Problem helfen.
Gruß Steven
Ich habe folgende Herausforderung zu bewaeltigen.
Ich habe ein FTP-Script erstellt, welches mir mit Hilfe des DIR-Befehls eine Verzeichnisliste vom FTP holt und in eine Logdatei (connect.log) schreibt. Nun muss ich ueberpruefen, ob Dateien auf dem FTP-Server liegen. Das ist kein Problem, ich ueberpruefe das Log-File auf den Namen jeweiligen der Datei. Nun ist allerdings ein Problem aufgetreten das ich nicht geloest bekomme.
Das Problem wurde zwar im Forum schon einmal aufgegriffen allerdings nicht in dieser Form.
https://www.administrator.de/index.php?content=57137
Das Problem:
Mit dem DIR-Befehl bekomme ich ja eine Uebersicht der gesamten Verzeichnisstruktur z.B. vom Ordner "share". In diesem werden Tag fuer Tag neue Dateien abgelegt. Der DIR-Befehl gibt zwar das Datum mit an allerdings in der Form "<UHRZEIT> <13> <Aug>". Lokal (unter Windows) gibt %date% /t allerdings "13.08.2009" aus.
Meine Frage daher.
Wie kann ich das FTP-Datum (welches in connect.log steht) mit dem lokalen Datum vergleichen.
Ich habe mir dazu schon einige Gedanken gemacht, allerdings komme ich damit zu keinem Erfolg und wirklich gut ist es auch nicht.
Hier meine bat:
@echo off
FOR /F "tokens=2,3,4 delims= " %%i IN (C:\scripts\autorating\RC2\getjob.log) DO (
if "%%j"=="Jan" echo %date:~-7,2%
if "%%j"=="Feb" echo %date:~-7,2%
if "%%j"=="Mar" echo %date:~-7,2%
if "%%j"=="Apr" echo %date:~-7,2%
if "%%j"=="May" echo %date:~-7,2%
if "%%j"=="Jun" echo %date:~-7,2%
if "%%j"=="Jul" echo %date:~-7,2%
if "%%j"=="Aug" echo %date:~-7,2%
if "%%j"=="Sep" echo %date:~-7,2%
if "%%j"=="Oct" echo %date:~-7,2%
if "%%j"=="Nov" echo %date:~-7,2%
if "%%j"=="Dec" echo %date:~-7,2%
REM if "%%j"=="" echo Schrott
)
FOR /F "tokens=3,4,5 delims= " %%j IN (C:\scripts\autorating\RC2\getjob.log) DO (
if "%%k"=="1" echo %date:~-10,2%
if "%%k"=="2" echo %date:~-10,2%
if "%%k"=="3" echo %date:~-10,2%
if "%%k"=="4" echo %date:~-10,2%
if "%%k"=="5" echo %date:~-10,2%
if "%%k"=="6" echo %date:~-10,2%
if "%%k"=="7" echo %date:~-10,2%
if "%%k"=="8" echo %date:~-10,2%
if "%%k"=="9" echo %date:~-10,2%
if "%%k"=="10" echo %date:~-10,2%
if "%%k"=="11" echo %date:~-10,2%
if "%%k"=="12" echo %date:~-10,2%
if "%%k"=="13" echo %date:~-10,2%
if "%%k"=="14" echo %date:~-10,2%
if "%%k"=="15" echo %date:~-10,2%
if "%%k"=="16" echo %date:~-10,2%
if "%%k"=="17" echo %date:~-10,2%
if "%%k"=="18" echo %date:~-10,2%
if "%%k"=="19" echo %date:~-10,2%
if "%%k"=="20" echo %date:~-10,2%
if "%%k"=="21" echo %date:~-10,2%
if "%%k"=="22" echo %date:~-10,2%
if "%%k"=="23" echo %date:~-10,2%
if "%%k"=="24" echo %date:~-10,2%
if "%%k"=="25" echo %date:~-10,2%
if "%%k"=="26" echo %date:~-10,2%
if "%%k"=="27" echo %date:~-10,2%
if "%%k"=="28" echo %date:~-10,2%
if "%%k"=="29" echo %date:~-10,2%
if "%%k"=="30" echo %date:~-10,2%
if "%%k"=="31" echo %date:~-10,2%
REM if "%%k"=="" echo Schrott
)
pause
FOR /F "tokens=2,3,4 delims= " %%i IN (C:\scripts\autorating\RC2\getjob.log) DO (
if "%%j"=="Jan" echo %date:~-7,2%
if "%%j"=="Feb" echo %date:~-7,2%
if "%%j"=="Mar" echo %date:~-7,2%
if "%%j"=="Apr" echo %date:~-7,2%
if "%%j"=="May" echo %date:~-7,2%
if "%%j"=="Jun" echo %date:~-7,2%
if "%%j"=="Jul" echo %date:~-7,2%
if "%%j"=="Aug" echo %date:~-7,2%
if "%%j"=="Sep" echo %date:~-7,2%
if "%%j"=="Oct" echo %date:~-7,2%
if "%%j"=="Nov" echo %date:~-7,2%
if "%%j"=="Dec" echo %date:~-7,2%
REM if "%%j"=="" echo Schrott
)
FOR /F "tokens=3,4,5 delims= " %%j IN (C:\scripts\autorating\RC2\getjob.log) DO (
if "%%k"=="1" echo %date:~-10,2%
if "%%k"=="2" echo %date:~-10,2%
if "%%k"=="3" echo %date:~-10,2%
if "%%k"=="4" echo %date:~-10,2%
if "%%k"=="5" echo %date:~-10,2%
if "%%k"=="6" echo %date:~-10,2%
if "%%k"=="7" echo %date:~-10,2%
if "%%k"=="8" echo %date:~-10,2%
if "%%k"=="9" echo %date:~-10,2%
if "%%k"=="10" echo %date:~-10,2%
if "%%k"=="11" echo %date:~-10,2%
if "%%k"=="12" echo %date:~-10,2%
if "%%k"=="13" echo %date:~-10,2%
if "%%k"=="14" echo %date:~-10,2%
if "%%k"=="15" echo %date:~-10,2%
if "%%k"=="16" echo %date:~-10,2%
if "%%k"=="17" echo %date:~-10,2%
if "%%k"=="18" echo %date:~-10,2%
if "%%k"=="19" echo %date:~-10,2%
if "%%k"=="20" echo %date:~-10,2%
if "%%k"=="21" echo %date:~-10,2%
if "%%k"=="22" echo %date:~-10,2%
if "%%k"=="23" echo %date:~-10,2%
if "%%k"=="24" echo %date:~-10,2%
if "%%k"=="25" echo %date:~-10,2%
if "%%k"=="26" echo %date:~-10,2%
if "%%k"=="27" echo %date:~-10,2%
if "%%k"=="28" echo %date:~-10,2%
if "%%k"=="29" echo %date:~-10,2%
if "%%k"=="30" echo %date:~-10,2%
if "%%k"=="31" echo %date:~-10,2%
REM if "%%k"=="" echo Schrott
)
pause
Ich hoffe ihr koennt mir bei dem Problem helfen.
Gruß Steven
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 122656
Url: https://administrator.de/contentid/122656
Ausgedruckt am: 25.11.2024 um 05:11 Uhr
17 Kommentare
Neuester Kommentar
Hallo L-Unix!
Eine gleich bleibende Struktur (Datum steht in Zeile 7) der "getjob.log" vorausgesetzt, könnte das etwa so gehen:
Grüße
bastla
Eine gleich bleibende Struktur (Datum steht in Zeile 7) der "getjob.log" vorausgesetzt, könnte das etwa so gehen:
@echo off & setlocal
set "Jan=01"
set "Feb=02"
set "Mar=03"
set "Apr=04"
set "May=05"
set "Jun=06"
set "Jul=07"
set "Aug=08"
set "Sep=09"
set "Okt=10"
set "Nov=11"
set "Dec=12"
set "Done="
set "Mon="
for /f "skip=6 tokens=2-3" %%i in (C:\scripts\autorating\RC2\getjob.log) do if not defined Done set Done=True & set "Tag=10%%j" & call set "Mon=%%%%i%%"
if not defined Mon echo Schrott & goto :eof
set "DatumFTP=%Mon%%Tag:~-2%
set "DatumLokal=%date:~-7,2%%date:~-10,2%"
echo FTP:%DatumFTP% Lokal:%DatumLokal%
::Abfragebeispiel
if %DatumFTP% lss %DatumLokal% echo FTP-File ist alt
bastla
Hallo L-UniX!
Soferne die entsprechenden Zeilen herausgefiltert werden können (zB anhand des Suchbegriffs ".cdr.job"), dann etwa so:
Zu beachten wäre, dass im Suchbegriff der Punkt durch einen vorangestellten "\" maskiert ist, da er ansonsten als "beliebiges Zeichen" (was hier auch kein Beinbruch wäre) interpretiert würde.
Eine wichtige Einschränkung betrifft die Dateinamen: Diese dürfen kein Leerzeichen enthalten, da ansonsten die "token"-Zuordnung nicht mehr stimmt.
Grüße
bastla
Soferne die entsprechenden Zeilen herausgefiltert werden können (zB anhand des Suchbegriffs ".cdr.job"), dann etwa so:
@echo off & setlocal
set "Suche=\.cdr\.job"
set "Jan=01"
set "Feb=02"
set "Mar=03"
set "Apr=04"
set "May=05"
set "Jun=06"
set "Jul=07"
set "Aug=08"
set "Sep=09"
set "Okt=10"
set "Nov=11"
set "Dec=12"
set "Mon="
for /f "delims=" %%a in ('findstr /i "%Suche%" C:\scripts\autorating\RC2\getjob.log') do call :ProcessFile "%%a"
goto :eof
:ProcessFile
set "Mon="
for /f "tokens=1,3-4" %%i in (%1) do set "File=%%i" & set "Tag=10%%k" & call set "Mon=%%%%j%%"
if not defined Mon echo Schrott & goto :eof
set "DatumFTP=%Mon%%Tag:~-2%
set "DatumLokal=%date:~-7,2%%date:~-10,2%"
echo %File% FTP:%DatumFTP% Lokal:%DatumLokal%
::Abfragebeispiel
if %DatumFTP% lss %DatumLokal% echo FTP-File "%File%" ist alt
goto :eof
Eine wichtige Einschränkung betrifft die Dateinamen: Diese dürfen kein Leerzeichen enthalten, da ansonsten die "token"-Zuordnung nicht mehr stimmt.
Grüße
bastla
Hallo L-UniX!
Sorry, aber die Kombination Batch
mit Daten "getjob.log"
(beide eben nochmals heruntergeladen) funktioniert bei mir ...
Grüße
bastla
Sorry, aber die Kombination Batch
@echo off & setlocal
set "Suche=\.cdr\.job"
set "Jan=01"
set "Feb=02"
set "Mar=03"
set "Apr=04"
set "May=05"
set "Jun=06"
set "Jul=07"
set "Aug=08"
set "Sep=09"
set "Okt=10"
set "Nov=11"
set "Dec=12"
set "Mon="
for /f "delims=" %%a in ('findstr /i "%Suche%" C:\scripts\autorating\RC2\getjob.log') do call :ProcessFile "%%a"
goto :eof
:ProcessFile
set "Mon="
for /f "tokens=2-3*" %%i in (%1) do set "File=%%k" & set "Tag=10%%j" & call set "Mon=%%%%i%%"
if not defined Mon echo Schrott & goto :eof
set "DatumFTP=%Mon%%Tag:~-2%
set "DatumLokal=%date:~-7,2%%date:~-10,2%"
echo %File% FTP:%DatumFTP% Lokal:%DatumLokal%
::Abfragebeispiel
if %DatumFTP% lss %DatumLokal% echo FTP-File "%File%" ist alt
goto :eof
0,02Sekunden 4,25KB/s
hergestellt.
[::ffff:10.10.5.184]
list file connection for
07:38 Aug 12 test.cdr.job
07:09 Aug 13 test2.cdr.job
0,02Sekunden 4,31KB/s
Grüße
bastla
naaabend zusammen
wget -n
Gruß
Zitat von @bastla:
Hallo L-UniX!
Wie soll übrigens die Verarbeitung nach dem Datumsvergleich weitergehen?
Hallo L-UniX!
Wie soll übrigens die Verarbeitung nach dem Datumsvergleich weitergehen?
Zitat von @L-UniX:
Wenn ich das Datum habe und der Vergleich mit dem lokalen Datum
vollzogen wurde, wollte ich die Datei vom FTP per mget oder wget abholen und auf dem
lokalen Datentraeger speichern.
Wenn ich das Datum habe und der Vergleich mit dem lokalen Datum
vollzogen wurde, wollte ich die Datei vom FTP per mget oder wget abholen und auf dem
lokalen Datentraeger speichern.
wget -n
Gruß
@timobeil
Noch einen schönen Sonntag
bastla
Threads mit dir machen immer Spass
Da ich den (meistens) habe, freut's mich umso mehr, wenn's Dir (und Anderen) auch so geht ... ich hab viel von Dir & Biber gelernt
... sollte allerdings besser heißen: ich hab viel von Dir & (damit) Biber gelernt - so ziemlich alles, was über die Basics (Stichwort "command.com") hinausgeht, habe ich hier (und damit zum allergrößten Teil bei Biber) gefunden ...Noch einen schönen Sonntag
bastla