我无法在身份验证失败后尝试使用其他密码重新连接。ERRORLEVEL
似乎在我的代码中无法使用。我不知道出了什么问题。该代码位于Windows 10上的批处理文件中。
@echo off
echo use USERNAME> ftpcmd.dat
echo PASSWORD>> ftpcmd.dat
ftp -n -s:ftpcmd.dat files.000webhost.com
if %ERRORLEVEL% neq 0 (
goto TEST
)
:TEST
echo user USERNAME> ftpcmd.dat
echo DIFFERENTPASSWORD>> ftpcmd.dat
echo prompt>>ftpcmd.dat
echo cd Test>>ftpcmd.dat
echo mput FILE PATH>> ftpcmd.dat
ftp -n -s:ftpcmd.dat FTPTHING
无论如何,Windows ftp.exe
总是返回0。
您所能做的就是解析其输出并寻找错误。但这是不可靠的。
如果您想采用这种方法,请参见
- 如何捕获Windows FTP脚本中的错误条件?或
- 批处理命令检查FTP连接是否成功。
不过,您最好使用一些更好的FTP客户端。无论如何,您不得不支持加密,被动模式或递归传输,迟早会遇到ftp.exe
的麻烦。
如果您熟悉PowerShell,请使用PowerShell脚本中的FtpWebRequest
或WebClient
。这里有许多示例,例如使用PowerShell上传FTP。
如果没有,请使用某些第三方命令行FTP客户端。
例如,使用WINSCP FTP客户端,您的批处理文件可能看起来像:
@echo off
winscp.com /ini=nul /log=script.log /command ^
"open ftp://USERNAME:PASSWORD@ftp.example.com/" ^
"put C:LOCALFILE /REMOTE/PATH/" ^
"exit"
if ERRORLEVEL 1 (
winscp.com /ini=nul /log=script2.log /command ^
"open ftp://USERNAME:DIFFERENTPASSWORD@ftp.example.com/" ^
"put C:LOCALFILE /REMOTE/PATH/" ^
"exit"
)
参考:
- 自动化文件转移到FTP服务器;
- 我怎么知道脚本成功完成?;
- 将Windows FTP脚本转换为WINSCP SFTP脚本的指南。
WINSCP也可以从PowerShell使用,如果您想要更强大的实现。
(我是WINSCP的作者)