findstr дает неверный уровень ошибки

Почему это:

for /f "tokens=5 delims=<>" %%G in ('findstr /C:"<a href=\"register\">" "index.html"') do echo %%G

дать errorlevel 1, в то время как это

findstr /C:"<a href=\"register\">" "index.html"

выдает уровень ошибки 0?

Первый код дает мне строку, которую я ищу. Второй дает строку текста, в которой находится строка. Мне нужно, чтобы первый код давал мне уровень ошибки 0, потому что, насколько мне известно, он не возвращал ошибок. Что я делаю не так?


person zcalebz    schedule 07.02.2016    source источник
comment
Возможно, если бы вы разместили соответствующую часть своего файла, другие могли бы повторить ваш опыт без каких-либо предположений?   -  person Magoo    schedule 07.02.2016
comment
<th style="width:36%"><a href="register"><em>Premium</em></a></th> Ищу слово Премиум в первом коде, вот что выдало.   -  person zcalebz    schedule 07.02.2016


Ответы (1)


Команда for не может не устанавливать для ERRORLEVEL значение 1; он просто сохраняет ту же ценность, что и раньше. Я предлагаю вам установить ERRORLEVEL на 0 перед for с помощью этой строки:

ver > nul

Вы можете просмотреть полное описание значений ERRORLEVEL, установленных всеми внутренними командами, по адресу Какие значения ERRORLEVEL устанавливаются внутренними командами cmd.exe?

Кроме того, вы не сказали нам, как вы тестируете ERRORLEVEL. Если вы используете if %ERRORLEVEL% ... и эта команда размещена внутри блока кода, это также может быть проблемой, связанной с отложенным расширением.

person Aacini    schedule 07.02.2016
comment
Пожалуйста, сообщите нам причину! Особенно, если это не одно из упомянутых: предыдущий уровень ошибки = 1 или проблема с задержкой расширения... - person Aacini; 07.02.2016
comment
Таким образом, решение состоит в том, чтобы установить уровень ошибки на 0 перед командой for, как я указал в своем ответе, верно? На мой взгляд, мой ответ дает правильное решение, поэтому вы должны отметить его как правильный ответ... - person Aacini; 08.02.2016