Что эквивалентно $? в винде? - PullRequest
7 голосов
/ 24 июня 2009

Кто-нибудь знает, что эквивалентно $? в командной строке Windows? Есть ли?

РЕДАКТИРОВАТЬ: $? является переменной UNIX, которая содержит код завершения последнего процесса

Ответы [ 5 ]

11 голосов
/ 24 июня 2009

Вы хотите проверить значение %ERRORLEVEL%.

9 голосов
/ 24 июня 2009

Пакетные файлы Windows

% ERRORLEVEL% Возвращает код ошибки самая последняя использованная команда. Не нулевое значение обычно указывает на ошибку.

http://technet.microsoft.com/en-us/library/bb490954.aspx

Windows Powershell

$? Содержит True, если последняя операция выполнена успешно, и False в противном случае. И

$ LASTEXITCODE Содержит код завершения последнего исполняемого файла Win32.

http://blogs.msdn.com/powershell/archive/2006/09/15/ErrorLevel-equivalent.aspx

Cygwin Bash Scripting

$? Расширяется до кода состояния выхода самый последний выполненный передний план программа.

http://unix.sjcc.edu/cis157/BashParameters.htm

2 голосов
/ 04 октября 2011

Извините, что удалили старый поток, но стоит отметить, что% ERRORLEVEL% не сбрасывается с помощью команды каждой . Вы все еще можете проверить «положительный» уровень ошибки после нескольких строк последующего и успешного кода пакета.

Вы можете надежно сбросить уровень ошибки до чистого состояния с помощью ver. Этот пример работает с UnxUtils для большего списка каталогов Linux-ish. Сброс может показаться посторонним в конце, но не в том случае, если мне нужно вызвать этот скрипт из другого.

:------------------------------------------------------------------------------
:  ll.bat - batch doing its best to emulate UNIX
:  Using UnxUtils when available, it's nearly unix.
:------------------------------------------------------------------------------
:  ll.bat - long list: batch doing its best to emulate UNIX
:  ------------------------------------
:  zedmelon, designer, 2005 | freeware
:------------------------------------------------------------------------------
@echo off
    setlocal
    : use the UnxUtil ls.exe if it is in the path
    ls.exe -laF %1 2>nul

if errorlevel 1 (
    echo.
    echo ----- ls, DOS-style, as no ls.exe was found in the path -----
    echo.
    dir /q %1
    )

: reset errorlevel
    ver>nul 
    endlocal

Не стесняйтесь использовать это. Если вы еще не видели UnxUtils, проверьте их.

1 голос
/ 24 июня 2009
@echo off
run_some_command
if errorlevel 2 goto this
if errorlevel 1 goto that
goto end

:this
echo This
goto end

:that
echo That
goto end

:end
0 голосов
/ 24 июня 2009

% ERRORLEVEL%

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...