2011-08-23 126 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 
)