Batch file 使用ERRORLEVEL循环多次尝试批处理文件FTP进行密码/身份验证
身份验证失败后,我无法尝试重新连接其他密码<代码>错误级别在我的代码中似乎不起作用。我不知道出了什么问题。该代码位于Windows 10上的批处理文件中Batch file 使用ERRORLEVEL循环多次尝试批处理文件FTP进行密码/身份验证,batch-file,cmd,error-handling,ftp,errorlevel,Batch File,Cmd,Error Handling,Ftp,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
@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
您所能做的就是解析其输出并查找错误。但这是相当不可靠的
如果仍要采用此方法,请参阅
- 或
不过,您最好使用一些更好的FTP客户端。不管怎样,
ftp.exe
迟早会遇到麻烦,因为它不支持加密、被动模式或递归传输等许多限制
如果您熟悉PowerShell,请使用PowerShell脚本中的FtpWebRequest
或WebClient
。例如,这里有许多例子
如果没有,请使用第三方命令行FTP客户端 例如,您的批处理文件可能如下所示:
@echo off
winscp.com /ini=nul /log=script.log /command ^
"open ftp://USERNAME:PASSWORD@ftp.example.com/" ^
"put C:\LOCAL\FILE /REMOTE/PATH/" ^
"exit"
if ERRORLEVEL 1 (
winscp.com /ini=nul /log=script2.log /command ^
"open ftp://USERNAME:DIFFERENTPASSWORD@ftp.example.com/" ^
"put C:\LOCAL\FILE /REMOTE/PATH/" ^
"exit"
)
参考资料:
- )李>
- )李>
(我是WinSCP的作者)ftp命令总是返回错误级别0,无论发生什么情况。您必须将输出捕获到日志文件中,然后分析日志文件中的错误。我该如何做?请发布一个答案,因为我是批处理新手,我不知道如何捕获日志。