Партия 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
Но ваш код не устанавливает уровень ошибки.