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

Status einer FTP übertragung in BATCH überprüfen

Frage Entwicklung Batch & Shell

Mitglied: bole06

bole06 (Level 1) - Jetzt verbinden

26.06.2008, aktualisiert 27.06.2008, 12047 Aufrufe, 11 Kommentare

Guten Abend

Nach dem ich jetzt lange im WWW gesucht habe und nicht fündig wurde gelange ich an euch!

Ich habe ein Batch Script (WIN XP) das von einem FTP Server Files downloaded. Die funktioniert auch wunderbat aber es kann vorkommen,
dass auf dem Server die Files nicht vorhanden sind. In diesem Fall werden zwar lokal Files angelegt die aber leer sind. Das heisst auch file exist Test funktioniert nicht.

Ich suche eine Möglichkeit diesen Fall abzufangen und im Script eine entsprechende Meldung auszugeben. Leider habe ich bisher keine Möglichkeit gefunden
den Status des FTP Transfers abzufragen. Errorlevel setzt dies nicht.

Kann ich den Return Code der FTP Verbindung irgendwie abfragen oder gibt es beim FTP Aufruf eine Option damit keine Leerfile erstellt werden? Eventuell gibt es für
dieses Problem auch einen ganz anderen Ansatz.

Vielen Dank für eure Hilfe!

Gruss

Reto
Mitglied: 60730
26.06.2008 um 17:32 Uhr
Servus und Willkommen Reto.

Es hat sich als allgemein hilfreich erwiesen - bei Problemen mit Batchen aller Art die batch zwischen
01.
<code>
</code> einzutragen, dann ist das mit dem "helfen" einfacher

Grundsätzlich kannst du mit
01.
:startftp 
02.
ftp xyz123 
03.
FC /B "leeredatei.dummy" "Downloaddatei" 
04.
 
05.
if %errorlevel% = 1 del /q "Downloaddatei"
Eine Leere Datei "finden"

dazu brauchst du nur eine 0 Byte datei namens "leeredatei.dummy"

Idealerweise solltest du aber sicherstellen, daß der Download "wirklich" geklappt hat und da wäre dein Script ein besserer Ansatz zur Hilfe

Die Edith fragt die Profis - sagt mal wie macht Ihr das mit dem (code) (/code) in den Echten <> Klammern

und die Edith² sagt - wer lesen kann ist klar im Vorteil
Du willst leere Dateien löschen


dann drehen wir den Spiess doch um
Bitte warten ..
Mitglied: bastla
26.06.2008 um 20:16 Uhr
@TimoBeil

Anmerkung zu Zeile 5: Hier könntest Du entweder eine "echte" ERRORLEVEL-Abfrage (bedeutet immer ">=", siehe "if /?") mit
01.
if errorlevel 1 ...
vornehmen oder tatsächlich den Variableninhalt prüfen, dann aber mit "==" oder "equ" (bzw, analog zu oben, mit "geq") vergleichen:
01.
if %errorlevel%==1 ...
Die erste Variante bietet sich vor allem innerhalb von "for"-Schleifen an, da bei Variante 2 der Variablenwert (außer per "delayedExpansion") innerhalb der Schleife nicht ausgewertet werden kann.

Das "del" benötigt übrigens kein "/q", wenn nur eine einzelne Datei gelöscht werden soll.
Der Ansatz mit "fc" ist durchaus einfallsreich, aber eine gezielte Abfrage auf die Dateigröße in einer Schleife (speziell wenn es um mehrere Dateien geht) wäre vielleicht auch nicht so übel , zB
01.
for %%i in ("D:\ftp-Downloads\*.txt") do if %%~zi equ 0 echo %%i ist leer
Grüße
bastla
Bitte warten ..
Mitglied: bole06
27.06.2008 um 08:52 Uhr
Guten Morgen

Vielen Dank für die promte Hilfe! Mit dem Tipp des Filevergleichs mit einen leeren File kann ich mein Problem bereits lösen, jedoch würde es mich schon interessieren ob es nicht eine elegantere Lösung gibt den Status des FTP Transfers abzufragen.

Anbei noch mein Code:

01.
echo File Transfer Down ausführen 
02.
echo ---------------------------------------  
03.
:startFtp >> %down% 
04.
ftp -s":%down% 
05.
:end
Im FTP File steht folgendes:
01.
open XXXXXXXXXXX.net  
02.
XXXXXXXXXX 
03.
XXXXXXXXX 
04.
ascii  
05.
cd //  
06.
lcd x:\Positons_File   
07.
get position_all.txt position_4298_all.txt       
08.
bye 
Da ich mein Problem bereits lösen kann ist die Frage nur zu meiner Weiterbildung... für eine Antwort Danke ich im vorraus, sie ist sicher aber nicht dringend....

Gruss

Reto
Bitte warten ..
Mitglied: 60730
27.06.2008 um 11:34 Uhr
@ Bastla:

Das fehlen des zweiten = liegt an meiner [Edit] - da hab ich das schlicht überschreiben (als ich den Spieß umgedreht habe)
Das "del" scheib ich schon mechanisch "del /q"

Es macht mir immer wieder Spaß hier auch zu lernen, nicht nur Antworten zu geben - den da:
do if %%~zi equ 0 echo %%i ist leer
kannte ich noch nicht - Schankedöhn vielmals

@ reto -ich ahnte es (ftp.exe) - da wir einen Proxy haben, kann ich das ftp.exe nicht benutzen für FTP Downloads mit User & pass nehme ich WSFTP - jedoch nchtdie freie (verlinkte), sondern eine "gekaufte Pro" - (ob in der freien das FTPsync dabei ist - bitte selber nachsehen)

In der .ctl steht Server, User, Password & Ordner usw. drin
01.
:start 
02.
ftpsync.exe %1.ctl 
03.
findstr /c:"Completed" %1.log 
04.
echo %errorlevel% 
05.
IF %ERRORLEVEL% GTR 0 goto start 
06.
IF %ERRORLEVEL% EQU 0 goto end 
07.
:end
WGet liefert mir auch ein log -das frage ich dann so ab:
find "is more recent, not retrieving." %1.log
Bitte warten ..
Mitglied: mybusiness1987
08.08.2012, aktualisiert um 14:33 Uhr
Zitat von bastla:
Der Ansatz mit "fc" ist durchaus einfallsreich, aber eine gezielte Abfrage auf die Dateigröße in einer
Schleife (speziell wenn es um mehrere Dateien geht) wäre vielleicht auch nicht so übel , zB
01.
for %%i in ("D:\ftp-Downloads\*.txt") do if %%~zi equ 0 echo %%i ist leer

Hallo bastla,

versuche gerade dein Beispiel etwas umzuschreiben. Und zwar ziehe ich mir eine log-Datei mittels "dir" von einem FTP und möchte dann auf 0-Byte Dateien prüfen um diese anschließend vom FTP zu löschen.

Folgendes habe ich mir mal zusammengebastelt:

01.
 for /f "tokens=3" %%i in (%LASTLW%\ebt\test.log) do if %%i equ 0 echo del "%%i">>ftp.txt
habe dies jedoch noch nicht getestet, damit ich nicht aus Versehen was vom Server lösche.
Könnte das so funktionieren?

Grüße
Armin
Bitte warten ..
Mitglied: bastla
08.08.2012 um 15:48 Uhr
Hallo mybusiness1987!
habe dies jedoch noch nicht getestet, damit ich nicht aus Versehen was vom Server lösche.
Du erstellst damit ja zunächst eine "ftp.txt", die Du in aller Ruhe ansehen kannst (ohne sie gleich als Script-Datei an "ftp.exe" zu übergeben) - damit hast Du eigentlich schon eine Testmöglichkeit ...

Grüße
bastla
Bitte warten ..
Mitglied: mybusiness1987
08.08.2012 um 15:50 Uhr
oh ja, entschuldige, daran habe ich garnicht gedacht. teste es gleich mal...
Bitte warten ..
Mitglied: mybusiness1987
08.08.2012 um 16:04 Uhr
Das vorher war etwas Blödsinn :P

so hat es funktioniert:

01.
for /f "tokens=3*" %%i in (%LASTLW%\ebt\test.log) do if %%i equ 0 echo del "%%j">>ftp.txt
Trotzdem vielen Dank

Grüße
Armin
Bitte warten ..
Mitglied: mybusiness1987
14.08.2012, aktualisiert um 11:23 Uhr
Hallo,

ich versuche gerade das obere Codestück zum löschen von 0 Byte Dateien anzupassen, Und zwar so, dass er die Dateigröße in der log mit der Dateigröße in einem lokalen Verzeichnis vergleicht. Wenn diese nicht identisch ist, soll die Datei aus der log (also auf dem FTP) gelöscht werden.

Leider komme ich irgendwie zu keiner Lösung. habe folgendes probiert:

01.
for /f "tokens=3*" %%i in (%LASTLW%\ebt\test.log) do if not "%LASTLW%\ebt\test\%%i" echo del "%%j">>ftp.txt
Hoffe ihr könnt mir wieder mal helfen.

Gruß Armin
Bitte warten ..
Mitglied: bastla
14.08.2012 um 11:58 Uhr
Hallo mybusiness1987!

Du musst ja zuerst die aktuelle Dateigröße ermitteln - daher eher:
for /f "tokens=3*" %%i in (%LASTLW%\ebt\test.log) do for %%a in ("%LASTLW%\ebt\test\%%j") do if %%~za neq %%i echo del "%%j">>ftp.txt
Grüße
bastla
Bitte warten ..
Mitglied: mybusiness1987
14.08.2012 um 13:00 Uhr
Danke dir vielmals, funktioniert super

Gruß
Armin
Bitte warten ..
Neuester Wissensbeitrag
Off Topic

"Ich habe nichts zu verbergen"

(2)

Erfahrungsbericht von FA-jka zum Thema Off Topic ...

Ähnliche Inhalte
Batch & Shell
Batch datei zum Hochladen von Datein auf ftp server (2)

Frage von loxymus zum Thema Batch & Shell ...

Batch & Shell
gelöst Per FTP-Shell oder Batch in ein unbekanten Ordner wechseln (8)

Frage von Ducky2 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch: Textdatei Zeilenweise auslesen (2)

Frage von CreatorX zum Thema Batch & Shell ...

Batch & Shell
Verschachtelte For Schleife für Batch Neuling (3)

Frage von yperiu zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Linux Netzwerk
gelöst DHCP vergibt keine Adressen (32)

Frage von Maik82 zum Thema Linux Netzwerk ...

CPU, RAM, Mainboards
Kaufberatung für mind. 8 verschiedene HighEnd-Mainboards (20)

Frage von yperiu zum Thema CPU, RAM, Mainboards ...

Apache Server
gelöst Lets Encrypt SSL mit Apache2 (20)

Frage von banane31 zum Thema Apache Server ...

Mac OS X
Mac kann nicht im LAN pingen alle anderen schon (14)

Frage von smartino zum Thema Mac OS X ...