У меня есть пакетный файл, который использует эту идиому (много раз) для чтения значения реестра в переменную среды:
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) в переменную среды.