2014-11-25 79 views
1

我正在嘗試以下命令並想要退出我的process(%ERRORLEVEL%)。但它返回previous(last)執行退出碼結果sample.exe。我想獲取當前命令的退出碼。我的要求是在單行*(不是批處理腳本)*中執行多個命令。%ERRORLEVEL%無法在一條線上運行多個命令

命令:

cmd /c sample.bat "test" > c:\ouput.log & echo %ERRORLEVEL% > c:\returnCode.log 

我甚至用 「SETLOCAL enableDelayedExpansion」 象下面這樣試過。它仍然沒有返回當前命令的退出代碼

cmd /c setlocal enableDelayedExpansion & sample.bat "test" > c:\ouput.log & echo %ERRORLEVEL% > c:\returnCode.log 

請讓我知道,以獲得當前命令的退出代碼的方式。

+0

EXIT/B%ERRORLEVEL%是返回退出代碼的正確方法**例如鏈接** - http://www.manageengine.com/products/desktop-central/returning-error-code-on-scripts- how-to.html – 2014-11-25 05:16:40

+0

@Bot:這是真的_批處理file_,但有*(不是批處理腳本)*「在這裏! – Aacini 2014-11-25 16:23:43

回答

1
cmd /c sample.exe "test" > c:\ouput.log & call echo %%ERRORLEVEL%% > c:\returnCode.log 

應該爲你工作。見無盡的SO項目相關delayedexpansion

+0

感謝您的回覆。我試過上面的命令,仍然是打印上次執行的命令退出代碼。 cmd/c sample.bat「test」> c:\ ouput.log&call echo %% ERRORLEVEL %%> c:\ returnCode.log – 2014-11-25 18:33:55

+0

我相信我們沒有在這裏得到完整的故事。似乎沒有理由在'cmd'下運行'sample.exe'。我建議你閱讀http://stackoverflow.com/questions/27097252/return-error-message-from-batch-file/27097793#27097793。似乎正在發生的事情是'cmd'正常終止,沒有通過'exit'設置退出代碼(可能與XP/W7 +不同)。也許你需要運行'sample.exe'而不調用'cmd'或設法在'exit%errorlevel%'(在子cmd'上下文中)退出'cmd' – Magoo 2014-11-26 00:05:47

5

這應該工作:

cmd /V:ON /c sample.exe "test" > c:\ouput.log ^& echo !ERRORLEVEL! > c:\returnCode.log 

/V:ON開關有setlocal EnableDelayedExpansion同樣的效果。對於進一步的細節,類型:cmd /?

EDIT:小錯誤固定的,&字符必須用^轉義,否則,echo !ERRORLEVEL!命令是在cmd/V執行:ON !!!

+0

謝謝你的迴應。上述命令正在打印「!ERRORLEVEL!」而是在c:\ returnCode.log中退出代碼值。我甚至用%ERRORLEVEL%嘗試過,仍然是打印上次執行的命令退出代碼。 /V:ON/c sample.exe「test」> c:\ ouput.log&echo%ERRORLEVEL%> c:\ returnCode.log – 2014-11-25 18:30:28

+0

Ops!小錯誤:用'^'在'&'前面。請參閱編輯... – Aacini 2014-11-26 01:26:30

+0

也許有可能第二個'>'也需要被轉義:'^&echo!ERRORLEVEL! ^> ...或者第一個,也許?你需要在這裏做一些測試... – Aacini 2014-11-26 02:55:50

0

感謝您的回覆。只有當我通過WMI類(Win32_Process)運行時,我才能用下面的命令獲得當前執行命令的退出代碼。使用WMI客戶端,我在遠程機器上執行下面的命令,它工作正常,即能夠在Retrun.txt中寫入退出代碼。 :\ Output.txt & echo!ERRORLEVEL! > c:\ Return.txt

但是,如果我在相同的遠程機器的命令提示符中運行相同的命令,它正在打印「!ERRORLVEL!」在Return.txt中而不是「sample.bat」退出代碼。

我很想知道爲什麼它不工作,如果我在本地從同一臺機器的命令提示符運行。

+0

解釋在答案中。在CMD的命令行上指定'/ V:ON'可以延遲擴展。顯然,您嘗試運行命令的已經打開的CMD會話不是由'/ V:ON'開關啓動的 - 這意味着延遲擴展是(並且仍然)未啓用。 (關於*爲什麼*延遲擴展是需要的 - 這是因爲'!'語法,其*是延遲擴展。) – 2014-11-27 11:35:13