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, 11959 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
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
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 Per Batch FTP-Server Dateien ändern (1)

Frage von Marlon1 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
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 ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Microsoft
Ordner mit LW-Buchstaben versehen und benennen (19)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...