flauschbobbel
Goto Top

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):

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%
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

Content-ID: 93332

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

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

bastla
bastla 31.07.2008 um 17:06:39 Uhr
Goto Top
Hallo Flauschbobbel!

Eigentlich genügt ein
for %%i in ("D:\Deine Datei.txt") do for /f "tokens=1-2" %%a in ("%%~ti") do set "Datum=%%a" & set "Zeit=%%b"  
Grüße
bastla
Flauschbobbel
Flauschbobbel 31.07.2008 um 17:31:57 Uhr
Goto Top
Hallo bastla,

Danke, habe ich gemacht, das funktioniert auch soweit. Wie sieht das aber mit der anderen Liste aus? Wie erhalte ich hier das Datum um es mit dem ermittelten Wert zu vergleichen? Wie löse ich das Vergleichen? Kannst Du mir hier noch weiterhelfen?
Was macht denn das ("%%~ti") in dem genannten Vorschlag?

Grüße,
Flauschbobbel
Biber
Biber 31.07.2008 um 20:44:38 Uhr
Goto Top
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:
>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
--> 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...
bastla
bastla 31.07.2008 um 21:28:20 Uhr
Goto Top
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 face-wink, 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%
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:
@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%
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
paulepank
paulepank 31.07.2008 um 23:59:53 Uhr
Goto Top
Hallo Flauschbobbel,

warum so umständlich. Wozu gibt es Wget mit der Option -N ?

cu paulepank
Flauschbobbel
Flauschbobbel 01.08.2008 um 00:06:39 Uhr
Goto Top
Hallo paulepank,

weil ich es nur mit Standardbordmitteln lösen muss. Wget gehört nun mal nicht in den Standardumfang von FTP.

Grüße,
Flauschbobbel
67369
67369 01.08.2008 um 00:27:10 Uhr
Goto Top
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.
Flauschbobbel
Flauschbobbel 04.08.2008 um 18:38:45 Uhr
Goto Top
Herzlichen Dank an alle für Eure Unterstützung!

Ich habe bastla's Vorschlag umgesetzt, funktioniert soweit recht zufriedenstellend.

Grüße,
Flauschbobbel