У меня есть командный файл со следующим заголовком:
@Echo off
SETLOCAL EnableDelayedExpansion EnableExtensions
Внутри оператора If
, заключенного в круглые скобки ()
, у меня есть следующий код:
Echo SOME_VAR|FindStr /r /C:"^.*SOME.*$"
Echo Error: !errorlevel!
Echo %%SOME_VAR%%|FindStr /r /C:"^.*SOME.*$"
Echo Error: !errorlevel!
Это напечатает:
SOME_VAR
Error: 0
Error: 1
Если SOME_VAR является существующей переменной среды, это то, что я получаю. Если я удалю переменную, я получу ожидаемый успех.
Что здесь происходит? Мне нужно сбежать от чего-то большего? Как я могу получить успешную находку на втором, если переменная существует? Меня интересует только текстовый поиск, в котором искомый текст содержит символ %
и совпадает с существующим именем переменной.
Кстати, источником для сравнения в конечном итоге тоже будет переменная, в которую я загрузил PATH, прочитанный из реестра Windows. Итак, в конечном итоге строка, которую я ищу, станет /C:"^.%%SOME_VAR%%;.*$"
Моя переменная PATH выглядит так:
%SOME_VAR%;C:\Windows\system32...................etc