2015-12-12 28 views
0

當我在服務器上運行它時以及使用psexec運行它時,我有一段代碼行爲不同。實際上,我試圖阻止電腦脫機,但這不是問題。問題是,當我直接在服務器上運行此命令時,errorlevel正在變爲1,因爲pc已聯機。但是,當我使用psexec在該服務器上運行具有相同命令的文件時,errorelevel不會更改,它保持爲0.我無法在Internet上找到任何解釋。使用psexec運行文件時錯誤級別不會更改

echo %errorlevel% 

ping -n 1 machine | findstr "not" > nul 
IF %errorlevel%==0 (
    echo test 
) 

echo %errorlevel% 

pause 

回答

1

你顯示的不是命令,而是批處理文件,比如ping_machine.cmd。要從psexec調用它,命令行應該類似psexec \\server cmd /c ping_machine.cmd。如果我猜錯了,你現在可能會停止閱讀這個答案的其餘部分(並且下次發佈足夠的相關背景以便不必猜測)。

問題是cmd /c返回ping_machine的退出代碼,但批處理文件沒有顯式設置退出代碼,所以默認返回0。這可以在cmd提示符處通過以下2次運行進行驗證 - 請注意,在批處理文件中您看到相同/正確的錯誤級別,但cmd /c返回0

C:\etc>ping_machine 
0 
1 
Press any key to continue . . . 

C:\etc>echo %errorlevel% 
1 

C:\etc>cmd /c ping_machine 
0 
1 
Press any key to continue . . . 

C:\etc>echo %errorlevel% 
0 

要有cmd /c的行爲像您期望的(進而psexec爲好),在批處理文件的末尾添加以下行返回相應的錯誤級別(這工作,因爲無論echo也不pause修改errorlevel ,否則你不得不將它保存在一個臨時變量中以備後用)。

exit /b %errorlevel% 
+0

問題是,我有什麼,我有pcexec命令運行批處理文件。在該批處理文件中,我有一些使用'%errorlevel%'進行比較的代碼。問題在於此;當我在本地運行該文件時,'%errorlevel%'正在改變,但是當我在遠程計算機上運行這個文件'%errorlevel%'沒有改變時,它停留在0. – IGRACH

+2

@IGRACH請發佈完整的psexec行和批處理文件s)參與。 – dxiv

0

它在那裏。當我在本地運行這個批處理文件,錯誤級別更改爲9009。當我使用psexec \\computername -f -c pathToFile,錯誤代碼0停留

@echo off 
echo %errorlevel% 
pin 234343 
echo %errorlevel% 
pause