2014-07-16 59 views
1

從Windows命令行運行此批處理文件會導致%errorlevel%爲5(即在執行批處理文件後打印數字5後在命令行上運行echo %errorlevel%):批處理文件中的「EXIT」不能覆蓋以前命令的返回碼

EXIT /B 5 

這很好。

但是,運行在0%的ERRORLEVEL%這個批處理文件的結果,無論是什麼:

sleep 1 
EXIT /B 5 

我希望它返回錯誤代碼5.我怎樣才能做到這一點?

注意:如果我將sys.exit(13)添加到sleep.py(見下文),那麼第二個批處理文件將以退出碼13返回。因此,我的批處理文件將返回退出碼sleep.py腳本,而不是通過EXIT命令指定的退出代碼(這很奇怪)。


sleep.bat:

sleep.py %1 

sleep.py:

import sys 
import time 

if len(sys.argv) == 2: 
    time.sleep(int(sys.argv[1])) 
+0

不,我從命令行呼應。所以在命令行中我首先輸入「my_batch_script.bat」並讓它運行。然後我輸入「echo%errorlevel%」。我只是嘗試延遲擴展,但它似乎並不在命令行上工作(回顯!errorlevel!只是打印!errorlevel!)。 – robert

回答

3

sleep是一個批處理文件。當以這種方式從另一個批處理文件調用批處理文件時,控制從不返回給調用者(類似於POSIX中的exec)。改爲使用call sleep 1

或者只是一起睡內置程序:

:sleep1 
setlocal 
set /a X=%~1 + 1 
ping ::1 -n %X% >nul 2>&1 
endlocal 
goto :eof 

:sleep2 
timeout /T %1 /nobreak 
goto :eof