Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

FTP Datum mit lokalem Datum abgleichen

Frage Internet Server

Mitglied: L-UniX

L-UniX (Level 1) - Jetzt verbinden

13.08.2009, aktualisiert 09:51 Uhr, 5614 Aufrufe, 17 Kommentare

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.
http://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

Ich hoffe ihr koennt mir bei dem Problem helfen.

Gruß Steven
Mitglied: bastla
13.08.2009 um 10:24 Uhr
Hallo L-UniX!

Könntest Du bitte eine Beispielzeile aus "getjob.log" posten?

Wie soll übrigens die Verarbeitung nach dem Datumsvergleich weitergehen?

Grüße
bastla
Bitte warten ..
Mitglied: L-UniX
13.08.2009 um 10:34 Uhr
Hallo bastla,

hier der Inhalt von "getjob.log":
0,02Sekunden 4,25KB/s
hergestellt.

[::ffff:10.10.5.184]
list file connection for
test.cdr.job
07:38 Aug 13
0,02Sekunden 4,31KB/s


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.

hier noch die connect.log:
ftp> Verbindung mit 10.10.5.184 wurde hergestellt.

open 10.10.5.184
220 ProFTPD 1.3.2 Server (ProFTPD) [::ffff:10.10.5.184]
Benutzer (10.10.5.184none)):
331 Password required for nobody

230 User nobody logged in
ftp> dir /jobout/
200 PORT command successful
150 Opening ASCII mode data connection for file list
-rw-r--r-- 1 0 0 0 Aug 10 07:38 test.cdr.job

226 Transfer complete
FTP: 64d Bytes empfangen in 0,00Sekunden 69000,00KB/s

ftp> dir /cdr/
200 PORT command successful
150 Opening ASCII mode data connection for file list
-rw-r--r-- 1 root root 0 Aug 10 07:38 test.cdr.gz

226 Transfer complete
FTP: 64d Bytes empfangen in 0,00Sekunden 68000,00KB/s

ftp> quit
221 Goodbye.

Wenn du noch meine ftp.bat sehen moechtest, die kann ich bei Bedarf auch noch anhaengen.
Ich denke zur Abfrage des Datums wuerde sich wohl die connect.log eher bevorzugen, da dort das Datum
samt Datei in einer Zeile steht.

Gruß Steven
Bitte warten ..
Mitglied: bastla
13.08.2009 um 10:46 Uhr
Hallo L-Unix!

Eine gleich bleibende Struktur (Datum steht in Zeile 7) der "getjob.log" vorausgesetzt, könnte das etwa so gehen:
01.
@echo off & setlocal 
02.
set "Jan=01" 
03.
set "Feb=02" 
04.
set "Mar=03" 
05.
set "Apr=04" 
06.
set "May=05" 
07.
set "Jun=06" 
08.
set "Jul=07" 
09.
set "Aug=08" 
10.
set "Sep=09" 
11.
set "Okt=10" 
12.
set "Nov=11" 
13.
set "Dec=12" 
14.
 
15.
set "Done=" 
16.
set "Mon=" 
17.
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%%" 
18.
if not defined Mon echo Schrott & goto :eof 
19.
 
20.
set "DatumFTP=%Mon%%Tag:~-2% 
21.
set "DatumLokal=%date:~-7,2%%date:~-10,2%" 
22.
 
23.
echo FTP:%DatumFTP% Lokal:%DatumLokal% 
24.
::Abfragebeispiel 
25.
if %DatumFTP% lss %DatumLokal% echo FTP-File ist alt
Grüße
bastla
Bitte warten ..
Mitglied: L-UniX
13.08.2009 um 11:04 Uhr
Hallo bastla,

erstmal ein großes Danke fuer deine Hilfe!
Ich kann das obige Script jetzt noch nicht testen, da ich einen Termin
im RZ wahrnehmen muss. Aber sobald ich wieder im Hause bin teste ich das Script durch.

Heute Abend oder spaetestens morgen frueh gebe ich eine Rueckmeldung.

Gruß und Vielen Dank nochmals!

Steven
Bitte warten ..
Mitglied: stbewo
13.08.2009 um 12:48 Uhr
Hallo bastla,

ich saach nur Hut ab "bastla". Ich bin zwar nicht ganz unbefleckt im "batchen" aber von Dir kann man noch immer was lernen


Gruß
Stefan
Bitte warten ..
Mitglied: bastla
13.08.2009 um 14:17 Uhr
@Stefan
Vielen Dank für die Blumen - werde ich postwendend an Biber weiterreichen ...

Grüße
bastla
Bitte warten ..
Mitglied: L-UniX
13.08.2009 um 15:37 Uhr
Hallo bastla,

das Script funktioniert wunderbar ;) Maechtig großen Dank fuer die Hilfe.
Ich habe nur noch eine Frage.

Besteht die Moeglichkeit den Datumsvergleich auch fuer mehrere Dateien zu realisieren?
Also wenn jetzt im getjob.log zwei Eintraege von Dateien sind?

Beispiel:
0,02Sekunden 4,25KB/s
hergestellt.

[::ffff:10.10.5.184]
list file connection for
test.cdr.job 07:38 Aug 12
test2.cdr.job 07:09 Aug 13
0,02Sekunden 4,31KB/s

Koennte man die Abfrage auch auf mehrere Dateien ausweiten?

Gruß Steven

PS: Ich setze den Beitrag schon mal auf geloest. ;)
Bitte warten ..
Mitglied: bastla
13.08.2009 um 16:01 Uhr
Hallo L-UniX!

Soferne die entsprechenden Zeilen herausgefiltert werden können (zB anhand des Suchbegriffs ".cdr.job"), dann etwa so:
01.
@echo off & setlocal 
02.
set "Suche=\.cdr\.job" 
03.
 
04.
set "Jan=01" 
05.
set "Feb=02" 
06.
set "Mar=03" 
07.
set "Apr=04" 
08.
set "May=05" 
09.
set "Jun=06" 
10.
set "Jul=07" 
11.
set "Aug=08" 
12.
set "Sep=09" 
13.
set "Okt=10" 
14.
set "Nov=11" 
15.
set "Dec=12" 
16.
 
17.
set "Mon=" 
18.
for /f "delims=" %%a in ('findstr /i "%Suche%" C:\scripts\autorating\RC2\getjob.log') do call :ProcessFile "%%a" 
19.
goto :eof 
20.
 
21.
:ProcessFile 
22.
set "Mon=" 
23.
for /f "tokens=1,3-4" %%i in (%1) do set "File=%%i" & set "Tag=10%%k" & call set "Mon=%%%%j%%" 
24.
if not defined Mon echo Schrott & goto :eof 
25.
 
26.
set "DatumFTP=%Mon%%Tag:~-2% 
27.
set "DatumLokal=%date:~-7,2%%date:~-10,2%" 
28.
 
29.
echo %File% FTP:%DatumFTP% Lokal:%DatumLokal% 
30.
::Abfragebeispiel  
31.
if %DatumFTP% lss %DatumLokal% echo FTP-File "%File%" ist alt 
32.
goto :eof
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
Bitte warten ..
Mitglied: L-UniX
13.08.2009 um 17:38 Uhr
Hallo bastla,

das Script funktioniert.
Aber ich muss doch nochmal was fragen. Wenn ich in der getjob.log den Dateinamen nicht an Position 1, sondern an Position 4 stehen habe, dann scheint das Script nicht mehr zu funktionieren.

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

Die Variable %Tag% wird dann nicht mehr korrekt ausgelesen. Ich habe schon versucht die Zaehlvariablen anzupassen, allerdings kommt dann bei %Tag% nur %10 heraus.

Muss ich nun darauf achten das der Dateiname immer am Anfang steht? Oder kann man das nachhaltig aendern?

Gruß

Steven
Bitte warten ..
Mitglied: bastla
13.08.2009 um 18:23 Uhr
Hallo L-UniX!

Ändere die Zeile 23 auf
for /f "tokens=2-3*" %%i in (%1) do set "File=%%k" & set "Tag=10%%j" & call set "Mon=%%%%i%%"
Die jetzt (endgültige? ) Reihenfolge hat den Vorteil, dass damit auch Dateinamen mit Leerzeichen richtig verarbeitet werden können.

Grüße
bastla
Bitte warten ..
Mitglied: L-UniX
14.08.2009 um 09:02 Uhr
Morgen bastla,

wenn ich die Zeile 23 aendere, so wie du gesagt hast, dann erhalte ich einen Syntaxfehler.

Das Script gibt dann folgendes aus:
Aug FTP:"test1.cdr.job 07:38 Aug 11 Lokal:0814
Syntaxfehler.

Setze ich wiederrum "tokens=1,3-4*" dann gehts.

Allerdings nimmt er dann als %File% die erste Position in der Textdatei (getjob.log),
dann steht allerdings nicht der Dateiname dort, sondern die Uhrzeit.

Gruß
Steven
Bitte warten ..
Mitglied: bastla
14.08.2009 um 10:57 Uhr
Hallo L-UniX!

Sorry, aber die Kombination Batch
01.
@echo off & setlocal 
02.
set "Suche=\.cdr\.job" 
03.
 
04.
set "Jan=01" 
05.
set "Feb=02" 
06.
set "Mar=03" 
07.
set "Apr=04" 
08.
set "May=05" 
09.
set "Jun=06" 
10.
set "Jul=07" 
11.
set "Aug=08" 
12.
set "Sep=09" 
13.
set "Okt=10" 
14.
set "Nov=11" 
15.
set "Dec=12" 
16.
 
17.
set "Mon=" 
18.
for /f "delims=" %%a in ('findstr /i "%Suche%" C:\scripts\autorating\RC2\getjob.log') do call :ProcessFile "%%a" 
19.
goto :eof 
20.
 
21.
:ProcessFile 
22.
set "Mon=" 
23.
for /f "tokens=2-3*" %%i in (%1) do set "File=%%k" & set "Tag=10%%j" & call set "Mon=%%%%i%%" 
24.
if not defined Mon echo Schrott & goto :eof 
25.
 
26.
set "DatumFTP=%Mon%%Tag:~-2% 
27.
set "DatumLokal=%date:~-7,2%%date:~-10,2%" 
28.
 
29.
echo %File% FTP:%DatumFTP% Lokal:%DatumLokal% 
30.
::Abfragebeispiel  
31.
if %DatumFTP% lss %DatumLokal% echo FTP-File "%File%" ist alt 
32.
goto :eof
mit Daten "getjob.log"
01.
0,02Sekunden 4,25KB/s 
02.
hergestellt. 
03.
 
04.
[::ffff:10.10.5.184] 
05.
list file connection for 
06.
07:38 Aug 12 test.cdr.job 
07.
07:09 Aug 13 test2.cdr.job 
08.
0,02Sekunden 4,31KB/s
(beide eben nochmals heruntergeladen) funktioniert bei mir ...

Grüße
bastla
Bitte warten ..
Mitglied: L-UniX
14.08.2009 um 11:38 Uhr
Hallo bastla,

jau jetzt gehts auch bei mir. ;)

Ich hatte beim Rumprobieren einen Tippfehler in der batch.
Aber nun geht alles.

Das Batch-Script habe ich etwas angepasst, da ich noch eine andere Logdatei habe, welche durchsucht wird. Und in dieser steht cdr.job an neunter Stelle, deswegen meine Frage. ;)

Jedenfalls nochmal vielen vielen Dank für deine Mühen, Hilfe, Unterstüzung und Geduld. :D

Grüße
Steven
Bitte warten ..
Mitglied: 60730
15.08.2009 um 01:21 Uhr
naaabend zusammen
Zitat von bastla:
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.

wget -n

Gruß
Bitte warten ..
Mitglied: bastla
15.08.2009 um 07:45 Uhr
@TimoBeil
wget -n
... macht aber viel weniger Spaß ...

Grüße
bastla
Bitte warten ..
Mitglied: 60730
15.08.2009 um 12:53 Uhr
Zitat von bastla:
@TimoBeil
> wget -n
... macht aber viel weniger Spaß ...
@bastla
Threads mit dir machen immer Spass
Wobei ich dazu schreiben muß - ich hab viel von Dir & Biber gelernt und deswegen unterscheiden sich unsere Wege seitdem seltener.

Grüße
bastla

zurück
Bitte warten ..
Mitglied: bastla
16.08.2009 um 10:19 Uhr
@TimoBeil
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
Bitte warten ..
Neuester Wissensbeitrag
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

Ähnliche Inhalte
Datenbanken
gelöst SQL-Abfrage - DISTINCT - letztes Datum (3)

Frage von emeriks zum Thema Datenbanken ...

Windows Tools
Automatischer FTP-Upload ohne angemeldeten Benutzer (5)

Frage von SarekHL zum Thema Windows Tools ...

DNS
gelöst Sophos UTM9 - FTP nur über IP erreichbar (4)

Frage von PronMaster zum Thema DNS ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...