У меня есть пакетный файл, который использует эту идиому (много раз) для чтения значения реестра в переменную среды:
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKLM\SOFTWARE\Path\To\Key" /v ValueName') DO SET MyVariable=%%B
(после delims=
есть символ табуляции)
Это прекрасно работает на тысячах компьютеров клиентов. Но на компьютере одного клиента (под управлением Windows Server 2003, расширения команд включены),
'REG QUERY "HKLM\SOFTWARE\Path\To\Key" /v ValueName'
не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл. ' Запуск только команды "reg query
" работает нормально. Reg.exe
присутствует в C:\Windows\System32
.
Мне удалось обойти проблему, изменив код на
REG QUERY "HKLM\SOFTWARE\Path\To\Key" /v ValueName > temp.txt
FOR /F "tokens=2* delims= " %%A IN (temp.txt) DO SET MyVariable=%%B
Это позволило клиенту начать работу, но я хотел бы понять, почему возникла проблема, чтобы избежать ее в будущем.
Немного отстранен от основной темы - также был бы полезен более прямой способ получения значения реестра (строки или DWORD) в переменной среды.