Estoy intentando obtener un resultado de un comando WMIC para configurarlo como variable. Por alguna razón, no funciona. ¿Alguien puede ayudar? Esto es lo que estoy tratando de hacer
for /f "tokens=*" %q IN (' WMIC /Node^:Comp1 PATH Win32_UserProfile WHERE LocalPath="C:\\users\\ABC1" GET Status ^| find /V "Status" ') do set pat= %q
¿Hay algo mal que estoy haciendo?
Respuesta1
El comando ejecutado por FOR /F pasa por un análisis adicional que convierte todos los delimitadores de tokens cmd.exe sin comillas o sin escape en espacios. Así WHERE LocalPath="value"
se convierte
WHERE LocalPath "value"
.
Puedes escapar del=
for /f "tokens=*" %q IN (
'WMIC /Node^:Comp1 PATH Win32_UserProfile WHERE LocalPath^="C:\\users\\ABC1" GET Status ^| find /V "Status" '
) do set pat= %q
O puede encerrar toda la cláusula WHERE entre comillas dobles y luego usar comillas simples para el valor (esta es mi forma preferida de escribir cláusulas WHERE con WMIC cuando se usan con FOR /F)
for /f "tokens=*" %q IN (
'WMIC /Node^:Comp1 PATH Win32_UserProfile WHERE "LocalPath='C:\\users\\ABC1'" GET Status ^| find /V "Status" '
) do set pat= %q
No creo que :
realmente sea necesario escapar de él, pero tampoco veo cómo puede causar algún daño.
Puede encontrarse con el mismo problema al seleccionar múltiples valores con WMIC en un for /F: las comas sin comillas/sin escape se convierten en espacios. Pero en estos casos citar no es una opción: debes evitar las comas.
Algo como esto no funcionará:
for /f "delims=" %%A in ('wmic ...... get value1,value2,value3') do ...
Debes escapar de las comas:
for /f "delims=" %%A in ('wmic ...... bet value1^,value2^,value3') do ...
EDITAR
Bueno, en realidad, hay un truco que a veces te permite eliminar por completo todos los escapes. Dado que el comando ejecutado por FOR /F se ejecuta a través de CMD /C, puede aprovechar el hecho de que CMD /C eliminará las comillas dobles.
Entonces, algo como lo siguiente funcionará sin ningún escape siempre y cuando keyword
no tenga ningún carácter que deba escaparse (no se cita durante la primera ronda de análisis).
for /f "delims=" %%A in (
'"wmic .... where this='x' and that='y' get value1,value2,value3 | find "keyword"'
) do ...