2016-03-11 2 views
1

поэтому у меня действительно проблемы с ERRORLEVEL партии. Это просто не работает для меня. У меня есть собственный собственный скрипт для сборки ms и я всегда получаю 0 обратно от ERRORLEVEL, независимо от того, что я делаю (например, msbuild, tf get, tf checkout, copy, xcopy, ...)Пакетный уровень ошибок не работает должным образом

поэтому я сделал небольшой пример, чтобы разместить его здесь:

@echo off 
set Update=1 
IF %Update% == 1 (
    echo. 
    set /p "=- Copy stuff..." <NUL 
    xcopy /R /Y C:\test\2.lib C:\test1 
    if %ERRORLEVEL% neq 0 (echo FAILED!) ELSE (echo SUCCEED!) 
    echo -^> done 
    pause 
) 

поэтому его всегда возвращаются успеха и печати 0, когда я делаю: эхо% ERRORLEVEL%

пожалуйста, вы можете помочь мне с этим? Я действительно хотел бы использовать эту ErrorLevel

ответ

2

вам нужно delayed expansion здесь или использовать IF ERRORLEVEL:

@echo off 
set Update=1 
IF %Update% == 1 (
    echo. 
    set /p "=- Copy stuff..." <NUL 
    xcopy /R /Y C:\test\2.lib C:\test1 
    IF ERRORLEVEL 1 (echo FAILED!) ELSE (echo SUCCEED!) 
    echo -^> done 
    pause 
) 

с IF ERRORLEVEL 1 вы можете проверить, если Равен 1 или больше.

+0

ах это здорово работает !! большое спасибо!! так это значит, что теперь он проверяет все уровни ошибок> = 1? чтобы сделать его более читаемым, я думал, что попробую: ЕСЛИ ERRORLEVEL 0 (echo SUCCEED!) ELSE (echo FAILED!), но к сожалению это не работает. ты знаешь почему? – Scorpion

+1

@Scorpion, потому что 'IF ERRORLEVEL 0' поймает уровни ошибок больше 0, которые включают 1,2 ... – npocmaka

1

Как говорит npocmaka, у вас есть проблема с задержкой расширения.

Альтернативой является толкать ERRORLEVEL и вместо этого использовать операторы конкатенации условных команд && и.

@echo off 
set Update=1 
IF %Update% == 1 (
    echo. 
    set /p "=- Copy stuff..." <NUL 
    xcopy /R /Y C:\test\2.lib C:\test1 && (echo SUCCEED!) || (echo FAILED!) 
    echo -^> done 
    pause 
) 

Edit показывает использование нескольких линий

@echo off 
set Update=1 
IF %Update% == 1 (
    echo. 
    set /p "=- Copy stuff..." <NUL 
    xcopy /R /Y C:\test\2.lib C:\test1 && (
     echo First success command 
     echo SUCCEED! 
    ) || (
     echo First failure command 
     echo FAILED! 
    ) 
    echo -^> done 
    pause 
) 
+0

для альтернативы! но поскольку команды, которые я хочу проверить, обычно намного дольше, я сделаю это в отдельной строке в другом, сделайте ее более читаемой :) – Scorpion

+0

@Scorpion - ??? Количество линий не имеет ничего общего с разницей в технике. Вы можете использовать несколько линий с этой техникой. – dbenham

+0

спасибо за ваш блеск! Извините, я раньше не говорил об этом, но я имел в виду, что его просто (для меня) менее легко читать, и я думаю также для коллег, когда они пройдут мою партию. Вот почему я придерживаюсь решения npocmaka. но вы также получили +1 от меня :) – Scorpion

Смежные вопросы