我在我的 中运行以下代码ftpUpload.bat
。如果文件未上传到 FTP 服务器,它应该打印“FTP 上传失败”,但这两种情况下我得到的都是“FTP 上传成功”。我需要在批处理文件中进行哪些更改才能获得正确的输出
@ECHO OFF
SET ReturnCode="0"
SET EncryptFilePath=%1
SET ReturnCode=0
::Echo Step4 : Upload Encrypted file in FTP server is started
@Echo open 104.213.13.281 21>>C:\Case360_EAR_Tool\%FileName%.txt
@Echo Dev>>C:\Case360_EAR_Tool\%FileName%.txt
@Echo MyDev>>C:\Case360_EAR_Tool\%FileName%.txt
@echo binary>>C:\Case360_EAR_Tool\%FileName%.txt
@echo cd inbound\development\extracts\yxd0>>C:\Case360_EAR_Tool\%FileName%.txt
@echo put %EncryptFilePath%>>C:\Case360_EAR_Tool\%FileName%.txt
@echo quit>>C:\Case360_EAR_Tool\%FileName%.txt
ftp -i -s:"C:\Case360_EAR_Tool\%FileName%.txt" && (
echo FTP upload is successful
DEL C:\Case360_EAR_Tool\%FileName%.txt
) || (
echo FTP upload is failed
echo ReturnCode="1"
DEL C:\Case360_EAR_Tool\%FileName%.txt
exit
)
echo %ReturnCode%
exit
答案1
我认为在 Windows 中没有可靠的方法来做到这一点ftp.exe
。
它不会通过退出代码报告结果。它总是返回 0,即使出现错误。
您所能做的就是解析ftp.exe
输出。但这是一种相当肮脏的方法。请注意,它ftp.exe
甚至不会将错误分离到错误输出中,而是将所有内容输出到标准输出。
您最好使用第三方 FTP 客户端。
例如WinSCP 脚本您可以使用:
@echo off
winscp.com /log=ftp.log /command ^
"open ftp://user:[email protected]/" ^
"cd inbound/development/extracts/yxd0" ^
"put %EncryptFilePath%" ^
"exit" && (
echo FTP upload is successful
) || (
echo FTP upload is failed
exit
)
哪里会ftp://user:[email protected]/
ftp://Dev:[email protected]/
也可以看看将 Windows FTP 脚本转换为 WinSCP FTP 脚本。
(我是 WinSCP 的作者)