Партия ERRORLEVEL всегда 0

Я столкнулся с проблемой при попытке реализовать ERRORLEVEL на мой пакетный скрипт. В основном то, что я пытаюсь сделать, это: искать .txt файлы в каталоге и если найдены; .txt попадет в список, если не найден; сообщение об ошибке произойдет.

Дело в том, что этот каталог не всегда будет содержать .txt, иногда он будет пустым, и когда это произойдет, мой код не будет работать. Только когда есть .txt в каталоге у меня условия на работу ((ERRORLEVEL = 0), но если пусто; ни одно из моих условий не будет. Даже не ERRORLEVEL будет напечатан на экране cmd (я должен видеть это как ERRORLEVEL = 1).

Это мой код:

for /r "C:\Texts" %%a in (*.txt) do ( 
echo %errorlevel%
IF ERRORLEVEL 0 (    
    echo %%a
    echo "I found your Text!"
    ) ELSE (
        echo "I couldn`t find your Text!" )
    )

Что именно не так с моим ERRORLEVEL реализация?

2 ответа

В вашем коде нет ни одной команды, устанавливающей уровень ошибки. Это значение устанавливается всеми внешними командами.exe (например, find или же findstr) и определенными внутренними командами (например, verify который устанавливает errorlevel=1, когда его параметр неверен, или ver который всегда устанавливает errorlevel=0.

Вы можете явно установить это значение в своем коде следующим образом:

rem Set the errorlevel to 1
verify bad 2> NUL

for /r "C:\Texts" %%a in (*.txt) do (
   echo %%a
   rem Set the errorlevel to 0
   ver > NUL
)

if not ERRORLEVEL 1 (
   echo "I found your Text!"
) else (
   echo "I couldn't find your Text!"
)

Однако вы также можете получить аналогичный результат, используя переменную Batch вместо уровня ошибки...

Уровень ошибки 0 всегда верен.

использование

if not errorlevel 1

Но ваш код не устанавливает уровень ошибки.

Другие вопросы по тегам