Я получаю информацию о реестре с помощью 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
нет ).