Tengo un archivo por lotes que utiliza este idioma (muchas veces) para leer un valor de registro en una variable de entorno:¿Por qué el archivo por lotes FOR falla al iterar sobre la salida del comando?
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKLM\SOFTWARE\Path\To\Key" /v ValueName') DO SET MyVariable=%%B
(Hay un carácter de tabulación después delims=
)
Esto funciona bien en miles de las computadoras del cliente. Pero en la computadora de un cliente (que ejecuta Windows Server 2003, extensiones de comando habilitadas), falla con 'REG QUERY' HKLM \ SOFTWARE \ Path \ To \ Key "/ v ValueName 'no se reconoce como un comando interno o externo, programa operable o archivo por lotes.' Ejecutar el comando "reg query" solo funciona bien. Reg.exe está presente en C: \ Windows \ System32.
que fue capaz de evitar el problema cambiando el código para
REG QUERY "HKLM\SOFTWARE\Path\To\Key" /v ValueName > temp.txt
FOR /F "tokens=2* delims= " %%A IN (temp.txt) DO SET MyVariable=%%B
Esto hizo que el hasta al cliente y correr, pero me gustaría entender por qué se produjo el problema para que pueda evitarlo en el futuro .
Un poco fuera del tema principal: una forma más directa de obtener un valor de registro (cadena o DWORD) en una variable de entorno también sería útil.
Verifiqué que se haya habilitado EnableExtensions. Editaré la pregunta para tomar nota de eso. –