Jaki jest najprostszy sposób na zresetowanie poziomu błędu do zera?
Mam Zdarzenie post-build, które uruchamia kilka poleceń dla projektu c#. Ostatnie polecenie czasami powodowałoby, że wartość ERRORLEVEL nie jest równa zeru, a następnie kompilacja nie powiodła się.
Chcę dodać dodatkowy wiersz polecenia, aby zawsze ustawić wartość błędu na zero. Jaki jest na to najwygodniejszy sposób?
10 answers
Jeśli użyjesz exit /b 0
, możesz zwrócić errorlevel 0
wewnątrz podrzędnego skryptu wsadowego bez wychodzenia z rodzica.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-23 15:48:20
Wydaje się robić sztuczkę:
ver > nul
Nie wszystko działa i nie jest jasne dlaczego. Na przykład, następujące nie:
echo. > nul
cls > nul
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-11 13:36:50
W zdarzeniu pre - lub post-build, jeśli kod zwracany przez program wykonywalny jest większy niż zero, a wywołanie programu wykonywalnego nie jest ostatnią linią zdarzenia pre-lub post-build, szybkim sposobem wyciszenia go i uniknięcia sprawdzenia niezerowej errorlevel
jest podążanie za nieudaną linią z linią, która jawnie zwraca zero:
cmd /c "exit /b 0"
Jest to zasadniczo ogólna kombinacja wcześniej wymienionych rozwiązań, które będą działać z więcej niż tylko Ostatni wiersz pre - lub zdarzenie po zbudowaniu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-09 23:21:36
Stwierdziłem, że "wyjście 0" wygląda na dobry sposób na rozwiązanie tego problemu.
Przykład Użycia:
NET STOP UnderDevService / Y
Exit 0
Jeśli usługa UnderDevService nie jest uruchomiona.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-01 20:20:51
Używam VERIFY
LUB VERIFY > nul
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-02 01:37:57
Ja osobiście używam tego:
cd .
Działa nawet w powłoce Uniksa.
Ale ten może być trochę szybszy:
type nul>nul
Ponieważ Process Monitor
pokazuje QueryDirectory
wywołuje cd .
PS:
cd .
mA kolejny ładny efekt uboczny w powłoce Uniksa. Przywraca odtworzony katalog roboczy w terminalu, jeśli został otwarty przed usunięciem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-02 10:21:25
Jeśli jest to fragment typu "post-build Event" itp., wtedy będzie dobrze:
(...) || ver > nul
Na końcu ostatniego polecenia.
Alternatywnie
cmd /c "exit /b 0"
Jest bardzo czysty i nie-idiomatyczny-czytelnik, który zna powłokę Windows, będzie wiedział, co się dzieje i jakie były twoje intencje.
Jednak, jeśli jesteś w skrypcie wsadowym, możesz użyć podprotin, które są lekkim odpowiednikiem "podrzędnego skryptu wsadowego" z odpowiedzi akf.
Mieć podprogram:
:reset_error
exit /b 0
A potem po prostu
call :reset_error
Gdziekolwiek tego potrzebujesz.
Oto pełny przykład:
@echo off
rem *** main ***
call :raise_error
echo After :raise_error ERRORLEVEL = %ERRORLEVEL%
call :empty
echo After :empty ERRORLEVEL = %ERRORLEVEL%
call :reset_error
echo After :reset_error ERRORLEVEL = %ERRORLEVEL%
:: this is needed at the end of the main body of the script
goto:eof
rem *** subroutines ***
:empty
goto:eof
:raise_error
exit /b 1
:reset_error
exit /b 0
Które wyjście:
After :raise_error ERRORLEVEL = 1
After :empty ERRORLEVEL = 1
After :reset_error ERRORLEVEL = 0
Jak widzisz-samo wywołanie i powrót przez goto: eof to za mało.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-11 22:01:38
Dodaj >nul
po każdym poleceniu, które może się nie udać - wydaje się to zapobiegać niepowodzeniu kompilacji.
Nadal możesz sprawdzić wynik polecenia, sprawdzając %errorlevel%
.
Na przykład:
findstr "foo" c:\temp.txt>nul & if %errorlevel% EQU 0 (echo found it) else (echo didn't find it)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-26 12:22:40
Używam tego:
Ping localhost-n 1 >null
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-17 00:13:08
Zawsze używałem;
set ERRORLEVEL=0
Używam go od lat.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-04 16:08:08