EDITAR

EDITAR

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 keywordno 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 ...

información relacionada