Выход из амперсанда (из числа гекса) в цикле FOR / F в CMD - PullRequest
0 голосов
/ 07 июня 2019

Я получаю информацию о реестре с помощью WMIC и хочу использовать команду FOR /F, чтобы оставить только нужное мне значение поля.

К сожалению, класс WMIC StdRegProv, который я использую, нуждается в шестнадцатеричном значении формы &Hxxxxxx в качестве параметра для описания улья HKLM.

При встраивании моей команды WMIC в оператор FOR я не смог найти правильный способ экранирования символа амперсанда.

Может кто-нибудь показать мне, как это сделать?

Я пробовал различные комбинации и повторения "^" (символ каретки) до и после амперсанда, и я получаю следующие виды ошибок (в соответствии с различными попытками "^"):

1. 'H80000002' is not recognized as an internal or external command, operable program or batch file.

2. Invalid format.
   Hint: <paramlist> = <param> [, <paramlist>].

3. & was unexpected at this time.

Иногда обе ошибки 1 и 2 вместе.

Вот мой код:

for /f "usebackq tokens=2" %i in (`WMIC /NameSpace:\\root\default Class StdRegProv Call GetStringValue hDefKey="^&H80000002" sSubKeyName="SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\notepad++.exe" sValueName="" ^| findstr /c:"sValue"`) do echo %i

Когда я перенаправляю вывод команды WMIC (с помощью команды findstr, переданной по нему) в текстовый файл, я получаю следующие результаты:

$ type tmp.txt
        sValue = "C:\\Program Files\\Notepad++\\notepad++.exe";
$ for /f delims^=^"^ tokens^=^2 %i in (tmp.txt) do @echo %i
C:\\Program Files\\Notepad++\\notepad++.exe

Это то, что я хотел бы получить напрямую, используя цикл FOR /F в синтаксисе WMIC ... | findstr ....

Это возможно?

Пожалуйста, не говорите мне использовать REG GET вместо WMIC:

Я специально хочу использовать WMIC, потому что он невосприимчив к локали ( результаты REG GET различаются при использовании французского вместо английского в качестве пользовательского / системного языка, тогда как WMIC нет ).

...