使用批量检查FTP上传是否成功?

使用批量检查FTP上传是否成功?

我在我的 中运行以下代码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 的作者)

相关内容