2011-08-23 90 views
4

我有一个有点相关,但不同的问题here如何捕获批处理脚本中的ftp错误代码?

我有一个批处理脚本(*.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++中的异常),而且我会有一个捕获所有异常,然后捕获它,然后我不会'认为这在批处理脚本中可用。

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

回答

0

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

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

不幸的是,如果标准的Windows ftp客户端返回非零错误代码,那么如果这是一个需求,您可能必须编写自己的代码。 This link暗示它不会返回错误代码,但会通过将输出重定向到文件并使用FIND命令返回错误代码来提供围绕尽管笨重的工作。

1

您可以将输出重定向到日志文件,并且当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 
)