Stellen Sie sicher, dass Sie verstehen, was die -s:"%~f0"
tut.
Es teilt der ftp.exe
die Batch-Datei selbst, als ob es wo ein FTP-Skript.
Wenn die ftp.exe
die Batch-Datei ausgeführt wird, es:
- gibt Ihnen zwei "Invalid Befehl" Fehler für die
:loop
und ftp.exe
Linien.
- läuft dem eigentlichen FTP-Skript
- Ihnen zwei „Invalid Befehl“ Fehler für die
TIMEOUT 10
und goto loop
Befehle gibt.
Auf der anderen Seite, die Batch-Datei-Interpreter (die cmd.exe
) sehen die GOTO:EOF
, was es effektiv erzählt die Batch-Datei zu interpretieren zu stoppen. Daher werden die TIMEOUT 10
und goto loop
nie ausgeführt.
Sie müssen:
- Änderung der
GOTO:EOF
kurz vor dem TIMEOUT 10
Befehl zu springen;
- erzählen die
ftp.exe
nach dem close
mit bye
Befehl zu stoppen, können Sie von diesem Satz von „Ungültiger Befehl“ Fehler zu ersparen.
:loop
ftp -i -s:"%~f0"&GOTO:afterftp
open Server_IPADDRESS
userName
Password
get test.txt
close
bye
:afterftp
TIMEOUT 10
goto loop
Obwohl Weg robuster ist die FTP-Skript und Batch-Datei zu trennen:
FTP-Skript (ftp.txt
):
open Server_IPADDRESS
userName
Password
get test.txt
close
Batch-Datei:
:loop
ftp -i -s:ftp.txt
TIMEOUT 10
goto loop
Oder eine temporäre Datei für den FTP-Skript verwenden:
:loop
echo open Server_IPADDRESS> ftp.txt
echo userName>> ftp.txt
echo Password>> ftp.txt
echo get test.txt>> ftp.txt
echo close>> ftp.txt
ftp -i -s:ftp.txt
del ftp.txt
TIMEOUT 10
goto loop
(eigentlich keine Notwendigkeit, die ftp.txt
in jeder Schleife neu erstellen)