Datum einer Datei vergleichen (FTP-Srv - Windows-Client)
Hallo Zusammen,
ich habe ein kleines Problem und komme trotz Recherchen hier im Forum nicht wirklich weiter.
Ich möchte auf einem FTP-Server prüfen, ob eine Datei mit neuerem Datum und Uhrzeit als die gleiche Datei
auf dem Windows Client vorhanden ist. Wenn die Datei auf dem FTP-Srv. neuer ist, dann soll die Datei
auf den Client kopiert werden.
Hier im Forum habe ich schon Anregungen gefunden um mittels Skript eine Datei vom FTP-Srv zu kopieren.
Das funktioniert auch bereits einwandfrei. Beim Vergleichen des Datum hänge ich etwas.
Ich hole mit zunächst via FTP den Inhalt des Verzeichnisses. Das sieht dann so aus (FTP> dir /verzeichnis/verz):
In meinem Verzeichnis auf dem WinXP-Client sieht das so aus (dir rt.csv):
Nun möchte ich also das Datum der Datei RT.CSV vom FTP-Server mit der lokalen Version vergleichen.
(Ich muss erst das Datum vergleichen, bevor ich die Datei vom FTP-Server hole, denn
nach dem kopieren vom FTP-Server hat die Datei das aktuelle Datum.)
Wenn die Datei auf dem FTP-Server neuer ist, dann soll er sie vom FTP-Srv kopieren (das funktioniert bereits einwandfrei)
um sie weiter zu verarbeiten (auch soweit OK).
Wenn die Datei lokal auf dem Client neuer ist, dann möchte ich die lokale Version verarbeiten.
"biber" sei Dank, habe ich im Forum ein Schnipsel gefunden um das Datum der Datei auf dem XP-Client
auszulesen:
So bekomme ich zumindest das Datum raus... Wie aber die Uhrzeit?
Wie kann ich denn bei den beiden Dateien das Datum/Uhrzeit vergleichen?
Sollte mit Bordmitteln zu machen sein, externe Tools kann/darf ich nicht einsetzen.
Habe im Forum hier schon gesucht, aber nichts für mich passendes gefunden.
Könnt ihr mir weiterhelfen?
Danke,
Flauschbobbel
ich habe ein kleines Problem und komme trotz Recherchen hier im Forum nicht wirklich weiter.
Ich möchte auf einem FTP-Server prüfen, ob eine Datei mit neuerem Datum und Uhrzeit als die gleiche Datei
auf dem Windows Client vorhanden ist. Wenn die Datei auf dem FTP-Srv. neuer ist, dann soll die Datei
auf den Client kopiert werden.
Hier im Forum habe ich schon Anregungen gefunden um mittels Skript eine Datei vom FTP-Srv zu kopieren.
Das funktioniert auch bereits einwandfrei. Beim Vergleichen des Datum hänge ich etwas.
Ich hole mit zunächst via FTP den Inhalt des Verzeichnisses. Das sieht dann so aus (FTP> dir /verzeichnis/verz):
total 128
-rw-rw-r-- 1 oracle dba 18329 Jun 2 11:51 AA_RO_Export_20080602115111.csv
-rw-rw-r-- 1 oracle dba 0 Jun 2 11:51 AA_RO_Steuerung_20080602.err
-rw-r--r-- 1 ideeu-1 users 9339 Jun 12 16:18 rt.csv
-rw-rw-r-- 1 oracle dba 18329 Jun 2 11:51 rt_org.csv
In meinem Verzeichnis auf dem WinXP-Client sieht das so aus (dir rt.csv):
Datentr„ger in Laufwerk D: ist Daten bitte selbst sichern!
Volumeseriennummer: DCAE-2CF2
Verzeichnis von D:\users\local\scripts
29.05.2008 14:33 9.322 RT.csv
1 Datei(en) 9.322 Bytes
0 Verzeichnis(se), 51.177.656.320 Bytes frei
Nun möchte ich also das Datum der Datei RT.CSV vom FTP-Server mit der lokalen Version vergleichen.
(Ich muss erst das Datum vergleichen, bevor ich die Datei vom FTP-Server hole, denn
nach dem kopieren vom FTP-Server hat die Datei das aktuelle Datum.)
Wenn die Datei auf dem FTP-Server neuer ist, dann soll er sie vom FTP-Srv kopieren (das funktioniert bereits einwandfrei)
um sie weiter zu verarbeiten (auch soweit OK).
Wenn die Datei lokal auf dem Client neuer ist, dann möchte ich die lokale Version verarbeiten.
"biber" sei Dank, habe ich im Forum ein Schnipsel gefunden um das Datum der Datei auf dem XP-Client
auszulesen:
for /f %%i in ('type E:\tmp.txt^|find /i "RT.csv"') do @set MyFileDate=%%i
echo %myfiledate%
Wie kann ich denn bei den beiden Dateien das Datum/Uhrzeit vergleichen?
Sollte mit Bordmitteln zu machen sein, externe Tools kann/darf ich nicht einsetzen.
Habe im Forum hier schon gesucht, aber nichts für mich passendes gefunden.
Könnt ihr mir weiterhelfen?
Danke,
Flauschbobbel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 93332
Url: https://administrator.de/contentid/93332
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
8 Kommentare
Neuester Kommentar
Moin Flauschbobbel,
wenn Du zwei Datums/Zeit-Werte vergeleichen willst, die Dir nur als zufällig formatierter Text vorliegen, dann musst Du Dir wohl (oder übel) einen eigenen Timestamp zusammenbraten.
Also einen numerischen Wert, mit dem Du dann einen simplen Kleiner/Größer-Vergleich abkaspern kannst.
Beispiel am CMD-Prompt, der erste Befehl liefert den formatierten Datums/Zeit-String:
--> also hast Du aus Datum "03.04.08" einen Zahl-Wert 20080408 gezaubert und aus einer Zeit "22:16" auch einen vergleichbaren Wert.
Im Regelfall sollte der Datumsvergleich ja genügen, bei gleichem Datum kannst Du zusätzlich noch die Zeitwerte prüfen.
Grüße
Biber
Irgendwo hab ich auch mal ein Tutorial zu dem Thema gelesen...
wenn Du zwei Datums/Zeit-Werte vergeleichen willst, die Dir nur als zufällig formatierter Text vorliegen, dann musst Du Dir wohl (oder übel) einen eigenen Timestamp zusammenbraten.
Also einen numerischen Wert, mit dem Du dann einen simplen Kleiner/Größer-Vergleich abkaspern kannst.
Beispiel am CMD-Prompt, der erste Befehl liefert den formatierten Datums/Zeit-String:
>for %i in (x*.txt) do @echo %~ti
03.04.08 22:16
>for %i in (x*.txt) do @For /f "tokens=1-3 delims=.: " %a in ("%~ti") do echo set /a dat=20%c%b%a
>for %i in (x*.txt) do @For /f "tokens=4,5 delims=.: " %a in ("%~ti") do echo set /a tim=1%a%b
set /a tim=12216
Im Regelfall sollte der Datumsvergleich ja genügen, bei gleichem Datum kannst Du zusätzlich noch die Zeitwerte prüfen.
Grüße
Biber
Irgendwo hab ich auch mal ein Tutorial zu dem Thema gelesen...
Hallo Flauschbobbel und Biber!
Bei mir wird das Jahr mit "%~ti" vierstellig ausgegeben - da ich heute ohnehin schon bezichtigt wurde, die Robustheit von Batchen zu fördern , schlage ich eine kleine Anpassung vor:
Damit hätten wir den Timestamp (die Zeit gleich mit reinzunehmen kostet ja eigentlich weniger, als zuerst zu schauen, ob wir sie überhaupt brauchen) für die lokale Datei.
Aus dem geposteten ftp-Inhaltsverzeichnis ließe sich der Timestamp so erzeugen:
Die Robustheit dieses Schnipsels hängt allerdings von den noch unbekannten Faktoren "Schreibweise einstelliger Uhrzeiten" und "Anzeige des Jahres für Dateien aus einem anderen als dem laufenden Jahr" ab (daher für's Erste auch einfach das Jahr als Konstante). Die Monatsnamensabkürzungen wären ebenfalls noch zu verifizieren.
Grüße
bastla
Bei mir wird das Jahr mit "%~ti" vierstellig ausgegeben - da ich heute ohnehin schon bezichtigt wurde, die Robustheit von Batchen zu fördern , schlage ich eine kleine Anpassung vor:
@echo off & setlocal
:: %1 = Pfad der lokalen Datei
for %%i in (%~1) do For /f "tokens=1-5 delims=.: " %%a in ("%%~ti") do set TimestampLocal=20%%c%%b%%a%%d%%e
set TimestampLocal=%TimestampLocal:~-12%
echo %TimestampLocal%
Aus dem geposteten ftp-Inhaltsverzeichnis ließe sich der Timestamp so erzeugen:
@echo off & setlocal
set Jahr=2008
:: %1 = Datei, deren Datum gelesen werden soll
:: %2 = Datei mit Inhaltsverzeichnis
::DATA Jan 01
::DATA Feb 02
::DATA Mar 03
::DATA Apr 04
::DATA May 05
::DATA Jun 06
::DATA Jul 07
::DATA Aug 08
::DATA Sep 09
::DATA Oct 10
::DATA Nov 11
::DATA Dec 12
for /f "tokens=6-8" %%a in ('findstr /i /c:" %~1" "%~2"') do (
for /f "tokens=3" %%m in ('findstr /b /c:"::DATA %%a" "%~f0"') do set "Monat=%%m
set /a Tag=100+%%b
set Zeit=%%c
)
set "TimestampFTP=%Jahr%%Monat%%Tag:~-2%%Zeit::=%"
echo %TimestampFTP%
Grüße
bastla
Boardmittel ist die Netzwerkumgebung. Dort kann man eine Netzwerkressource hinzufügen (den FTP-Server) und hat so auch Zugriff auf Datum und Zeit einer Datei.