批处理文件FTP尝试使用ERROLEVEL循环多次尝试密码/身份验证



我无法在身份验证失败后尝试使用其他密码重新连接。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脚本中的FtpWebRequestWebClient。这里有许多示例,例如使用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的作者)

相关内容

最新更新