findstr возвращает 0, если что-то было найдено, и 1, если ничего не было найдено. Вы только что перевернули чек.
Не требуется пакетная обработка, даже в Windows оболочка является интерактивной, поэтому вы можете попробовать ее вживую:
>dir | findstr ".sln"
15.01.2009 16:37 33.844 Project.sln
>echo %ERRORLEVEL%
0
>dir | findstr ".slngimpf"
>echo %ERRORLEVEL%
1
Кстати, проще написать
if errorlevel 0 andthencontinuewithwhatever
Таким образом, ваш сценарий также устойчив к зловещему:
set errorlevel=0
, который затем уничтожит любую будущую попытку правильно распечатать уровень ошибки с% errorlevel%.
( edit ) Важное примечание: я забыл сказать, что синтаксис if errorlevel
проверяет, является ли уровень ошибки больше или равен тестируемому значению за. Поэтому, чтобы правильно его использовать, вы всегда должны сначала проверять наивысшую ошибку, например:
someCommand
if errorlevel 10 ...
if errorlevel 9 ...
if errorlevel 0 ...