2011-07-25 2 views
10

Próbuję warunkowo uruchomić plik exe z pliku wsadowego warunkowo po pomyślnym wykonaniu innego exe.Błąd testu pliku wsadowego na poziomie

Próbowałem kilka różnych kombinacji IF i ERRORLEVEL ale żaden nie wydają się działać

"..\..\..\TeamBuildTypes\Current Branch\DatabaseUpdate.exe" -s localhost\sql2008r2 

IF %ERRORLEVEL% 1(
"..\..\..\TeamBuildTypes\Current Branch\DatabaseUpdate.exe" -s localhost\sql2008 
) 
Pause 

daje mi błąd

1 (było nieoczekiwane w tym czasie.

Gdzie się tutaj mylę?

+0

Hmm, może '1 (' jest złe Czy próbowałeś '1 (' z miejsca A przy okazji użyć albo 'jeśli errorlevel 1 (...' lub 'jeśli? % errorlevel% == 1 (... ' – jeb

+0

@jeb: Wydaje się, że jest to faktyczna przyczyna błędu, tzn. pomieszana składnia w skrypcie OP. –

Odpowiedz

32

IF ERRORLEVEL ... to specjalna składnia obsługiwana od czasów DOS, zmienna obsługa %ERRORLEVEL% została dodana w WinNT.

Oryginalny składnia jest używany tak:

call someapp.exe 
if errorlevel 1 goto handleerror1orhigher 
echo succuess... 

Aby użyć zmiennej, użyj normalne, jeśli składnia: if %errorlevel%==0 echo success...

Zauważ, że %errorlevel% przestaje działać, jeśli ktoś robi set errorlevel=foo i może nie uzyskać zaktualizowane dla wewnętrznych poleceń cmd.exe.

Alternatywnym rozwiązaniem jest użycie &&:

call someapp.exe && (echo success) || (echo error!) 

Istnieją (co najmniej) dwa znane przypadki, gdzie errorlevel jest uszkodzony i musi użyć || zamiast:

+1

Użyłem tylko' && 'lub' || ', nigdy oba na jednej linii.Nie wiem, że razem działają zasadniczo jak' IF ... ELSE' .To miło jest się uczyć, dziękuję! –

+4

jeśli errorlevel 0 oznacza "jeśli poziom błędu jest większy niż lub równe zero ", czyli dowolna wartość. Właściwym sposobem na pytanie o sukces jest: jeśli nie poziom błędu 1 echo sukcesu ... – Aacini

+0

@Aacini: dobrze tak, ale sprawdzam 1 przed 0, to jest poprawny sposób Aby to zrobić, – Anders

5

Ujemne poziomy błędu mogą powodować problemy. Spróbuj czegoś takiego:

IF '%ERRORLEVEL%'=='0' GOTO OK