mybusiness1987
Goto Top

Batch FTP, Verarbeitungsfehler durch FTP-Server

Hallo, habe folgendes Codestück...

for /f "tokens=4*" %%i in (%LASTLW%\FTP-Sync\doku.log) do (if not exist "%LASTLW%\ebt\doku\%%i %%j" echo del %%i %%j>>ftp.txt)

...das mir eine LOG-Datei (dir-Ausgabe von einem FTP Verzeichnis) mit einem Verzeichnis abgleicht. Wenn im Verzeichnis nicht die passende Datei zum String in der LOG gefunden wurde, wird ein delete-Befehl zusammen mit dem String aus der LOG ausgegeben um die Datei, die auf dem FTP existiert, aber im lokalen Verzeichnis nicht existiert, geöscht wird.

Hier ein Beispiel der Ausgabe:

del KR 11-034-1 (Btw. S12345 Test).doc

Der Befehl wird an den FTP übermittelt, aber leider verarbeitet der FTP diesen anscheinend nicht, da die Dateien leider nicht gelöscht werden.

Ich vermute, dass es an den Leerzeichen im Dateinamen liegt, denn wenn ich das ganze manuell abändere (den Dateinamen in Anführungszeichen setze), also so...

del "KR 11-034-1 (Btw. S12345 Test).doc"

... dann verarbeitet der FTP das ganze auch ohne Probleme und löscht die Datei.

Meine Frage ist nun, wie ändere ich das Codestück oben um, dass er mir die Ausgabe genau so (Dateiname in Anführungszeichen) ausgibt?

Habe verucht die Variablen in der Ausgabe in Anführungszeichen zu setzen,...

for /f "tokens=4*" %%i in (%LASTLW%\FTP-Sync\doku.log) do (if not exist "%LASTLW%\ebt\doku\%%i %%j" echo del "%%i %%j">>ftp.txt)

...aber so erfolgt dann garkeine Ausgabe.

Hoffe mir kann jemand helfen, danke schon mal.

Gruß Armin

Content-Key: 188996

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

Printed on: April 24, 2024 at 06:04 o'clock

Member: bytecounter
bytecounter Aug 02, 2012 at 14:37:23 (UTC)
Goto Top
Hallo Armin,

Du könntest mal versuchen, die Anführungszeichen zu entwerten:
echo del ^"%%i %%j^">>ftp.txt

vg
Bytecounter
Member: bastla
bastla Aug 02, 2012 at 15:22:30 (UTC)
Goto Top
Hallo mybusiness1987!

Abgesehen davon, dass die zuletzt gezeigte Schreibweise eigentlich funktionieren sollte, könntest du auch den gesamten Dateinamen am Stück bekommen:
for /f "tokens=3*" %%i in (%LASTLW%\FTP-Sync\doku.log) do if not exist "%LASTLW%\ebt\doku\%%j" echo del "%%j">>ftp.txt
Grüße
bastla

P.S.: "Code"-Formatierung ist gar nicht so schwer (und lässt sich auch nachträglich noch hinzufügen face-wink) ...
Member: mybusiness1987
mybusiness1987 Aug 06, 2012 updated at 12:35:35 (UTC)
Goto Top
Vielen Dank euch beiden. Habe deine Lösung genommen bastla. Es funktioniert wunderbar, aber irgendwie fehlt mir da das verständnis!?

Der Eintrag in der dir-Ausgabe bzw. LOG sieht ja folgendermaßen aus:

08-01-12 05:33PM 65024 KR 11-034-1 (Btw. S12345 Test).doc

Erster token wäre doch = 08-01-12
Zweiter Token = 05:33PM
Dritter = 65024

erst der vierte und alle weiteren wären doch der Dateiname!? Deswegen hatte ich bei mir auch 4* und nicht 3*

Anscheinend verstehe ich das irgendwie falsch!? Könntest du mir das bitte kurz etwas genauer erläutern?
Member: bastla
bastla Aug 06, 2012 at 13:01:48 (UTC)
Goto Top
Hallo mybusiness1987!
erst der vierte und alle weiteren wären doch der Dateiname!?
Yep - deswegen auch die Anforderung "Token 3 und den Rest am Stück", wobei Token 3 als %%i geliefert wird und der Rest daher als %%j - das wird dann letztlich auch für das Löschen verwendet ...

Grüße
bastla
Member: mybusiness1987
mybusiness1987 Aug 06, 2012 at 13:21:11 (UTC)
Goto Top
Alles klar, vielen Dank face-smile

Grüße
Armin