如何在批处理脚本中捕获ftp错误代码?

问题描述 投票:6回答:3

我有一个相关的问题,但问题不同here

我有一个这样的批处理脚本(*.bat文件:

@ftp -i -s:"%~f0"&GOTO:EOF
open ftp.myhost.com
myuser
mypassword
!:--- FTP commands below here ---
lcd "C:\myfolder"
cd  /testdir
binary
put "myfile.zip"
disconnect
bye

[基本上,这是一个将zip文件上传到ftp站点的脚本。我的问题是,上载操作可能会不时失败(远程ftp不可用,“ myfile.zip”不存在,上载操作被中断等等),当这种不幸的事情发生时,我希望我的蝙蝠文件返回1(exit 1)。

如果上传失败,这会很好,ftp会抛出一个异常(是的,就像C ++中的异常一样),而我会遇到一个包罗万象的异常,然后捕获它,然后按exit 1,但是我不知道'认为可以在批处理脚本中使用。

在这里做我需要的最好的方法是什么?

ftp batch-file
3个回答
2
投票

您可以将输出重定向到日志文件,并且在ftp会话完成时可以解析该文件。

@ftp -i -s:"%~f0" > log.txt & GOTO :parse
open ftp.myhost.com
myuser
mypassword
!:--- FTP commands below here ---
lcd "C:\myfolder"
cd  /testdir
binary
put "myfile.zip"
disconnect
bye

:parse
for /F "delims=" %%L in (log.txt) Do (
  ... parse each line
)

0
投票

我知道的唯一批处理文件选项是使用“ IF ERRORLEVEL”语法,这需要您的ftp客户端返回非零错误代码。

http://www.robvanderwoude.com/errorlevel.php是很好的参考指南。

[不幸的是,如果标准Windows ftp客户端返回非零错误代码,我不会这样做,因此如果需要,您可能必须自己编写代码。 This link建议它不返回错误代码,但可以通过将输出重定向到文件并使用FIND命令返回错误代码来解决(尽管很笨拙)。


0
投票

Windows FTP不返回任何代码。

我建议运行一个批处理文件,将您的ftp命令回显到输入响应文件,然后将该文件用作ftp命令的输入,将stderr重定向到文件并验证文件大小。像这样的东西

echo open ftp.myhost.com >ftpscript.txt
echo myuser >>ftpscript.txt
echo mypassword >>ftpscript.txt
echo lcd "C:\myfolder"  >>ftpscript.txt
echo cd  /testdir  >>ftpscript.txt
echo binary  >>ftpscript.txt
echo put "myfile.zip"  >>ftpscript.txt
echo disconnect  >>ftpscript.txt
echo bye  >>ftpscript.txt

ftp -i -s:ftpscript.txt >ftpstdout.txt 2>ftpstderr.txt 
rem check the ftp error file size, if 0 bytes in length then there was no erros
forfiles /p . /m ftpstderr.txt /c "cmd /c if @fsize EQU 0 del /q ftpstderr.txt"
if EXIST ftpstderr.txt (
   exit 1
)
© www.soinside.com 2019 - 2024. All rights reserved.