2014-02-14 94 views
5

我用下面的語句批處理腳本,如下所示:批處理文件嘗試捕捉

for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set TIME=%%j 
set TIME=%TIME:~0,12% 

但是,一旦我執行它返回我不可能先了解一個錯誤。然後知道錯誤是因爲路徑env變量中缺少wbem。此bat文件位於中央存儲庫中,以便任何人都可以執行此操作。因此,如果在本地機器中再次出現此錯誤,則需要讓用戶知道原因。

我不認爲在批處理中有try catch語句。此外,已知有關ErrorLevel。但我不知道如何實現這一點..任何人都可以在這方面支持我..

回答

8

批處理文件處理錯誤的標準方法是使用ERRORLEVEL變量。零意味着沒有錯誤,非零 - 錯誤:

@rem some code 
IF %ERRORLEVEL% NEQ 0 GOTO ProcessError 

@rem ... other code 
exit /b 0 

:ProcessError 
@rem process error 
exit /b 1 

exit /b exitCode套ERRORLEVEL這個退出碼。

+1

你可以告訴我這個代碼是如何使用我上面給出的代碼嗎? – Vysakh

2

TIME是一個魔術變量,它返回用戶格式的當前系統時間,除非它被用戶設置的普通環境變量覆蓋。

IOW,使用time以外的其他名稱作爲變量名稱。

至於錯誤,這將有助於如果你告訴我們錯誤是什麼。

現在,你可以嘗試

set "mytime=" 
for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set myTIME=%%j 
if defined mytime (set myTIME=%myTIME:~0,12%) else (
echo error - WMIC failed to execute - perhaps it's not in your PATH&goto :eof 
) 

注意到WMIC默認情況下不會在XP /家庭裝(和暗示,可能更早版本太)

+0

不適合我... :( – Vysakh

0

這是不相關的時間,但與wmic和錯誤處理有關。

這可能會有一定幫助。

FOR /F "tokens=2 delims==" %%I IN (
'wmic datafile where "name='C:\\Program Files 
(x86)\\Program\\programname.exe'" get version /format:list' 
) DO SET "R=%%I" 


set V=12.0.6158.23769 

if [%R%] == [] (
echo Program not installed... 
echo installing new version... 

GOTO new 
) 
if %R% == %V% (
GOTO old 
) 

GOTO new 
:: code here :: 
+0

我不明白,這與問題有關。 – Stephan