2014-02-14 14 views
5

Ich habe einen Batch-Skript mit der Aussage, wie unten dargestellt:Batch File try catch

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% 

Aber sobald ich ausgeführt es einen Fehler zurückgegeben, die ich zum ersten Mal könnte nicht verstehen. Dann lernte ich den Fehler kennen, weil der wbem in Pfad env Variable fehlte. Diese Fledermausdatei befindet sich in einem zentralen Repository, so dass jeder dies ausführen kann. Also, müssen Sie den Benutzer den Grund wissen lassen, wenn dieser Fehler erneut auf ihrem lokalen Rechner auftritt.

Ich glaube nicht, dass es eine Versuch Catch-Anweisung in Batch gibt. Auch über ErrorLevel bekannt. Aber ich bin mir nicht sicher, wie dies umgesetzt werden kann .. Kann mich jemand in dieser Hinsicht unterstützen ..

Antwort

8

Standard-Methode für Batch-Dateien, um Fehler zu behandeln ist ERRORLEVEL Variable zu verwenden. Null bedeutet keine Fehler, nicht-Null - Fehler:

@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 Sets Error-zu dieser exitcode.

+1

Können Sie mir bitte zeigen, wie dieser Code sein wird, mit meinem oben angegebenen Code? – Vysakh

2

TIME ist eine magische Variable, die die aktuelle Systemzeit im Benutzerformat zurückgibt, sofern sie nicht durch eine vom Benutzer festgelegte normale Umgebungsvariable überschrieben wird.

IOW, verwenden Sie etwas anderes als time als Variablenname.

Wie für den Fehler, es würde helfen, wenn Sie uns zeigen würden, was der Fehler war.

Nun könnte man versuchen

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 
) 

Anbetracht dessen, dass WMIC nicht standardmäßig in XP/Start (und implizit, frühere Versionen zu möglicherweise)

+0

Funktioniert nicht für mich ... :( – Vysakh

0

bezogen Dies ist nicht auf die Zeit installiert ist, aber bezieht sich auf die wmic- und Fehlerbehandlung.

könnte dies für jemanden hilfreich sein.

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

Ich sehe nicht, wie dies mit der Frage verbunden ist. – Stephan