O comando executado por FOR / F passa por uma análise extra que converte todos os delimitadores de token cmd.exe não-referenciados / sem escape em espaços. Então, WHERE LocalPath="value"
torna-se WHERE LocalPath "value"
.
Você pode escapar do =
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
Ou você pode colocar toda a cláusula WHERE entre aspas duplas e, em seguida, usar aspas simples para o valor (essa é a minha maneira preferida de escrever as cláusulas WHERE com WMIC quando usado com 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
Eu não acho que o :
realmente precise ser escapado, mas também não vejo como isso pode causar algum dano.
Você pode ter o mesmo problema ao selecionar vários valores com WMIC em a para / F - as vírgulas não citadas / sem escape são transformadas em espaços. Mas nesses casos, citar não é uma opção - você deve escapar das vírgulas.
Algo parecido com isso não funcionará:
for /f "delims=" %%A in ('wmic ...... get value1,value2,value3') do ...
Você deve escapar das vírgulas:
for /f "delims=" %%A in ('wmic ...... bet value1^,value2^,value3') do ...
EDITAR
Bem, na verdade, existe um truque que às vezes permite eliminar completamente todos os escapes. Como o comando executado por FOR / F é executado via CMD / C, você pode tirar proveito do fato de que o CMD / C removerá entre aspas duplas.
Portanto, algo como o seguinte funcionará sem nenhum escape, desde que o keyword
não tenha nenhum caractere que precise ser salvo (não é citado durante a primeira rodada de análise)
for /f "delims=" %%A in (
'"wmic .... where this='x' and that='y' get value1,value2,value3 | find "keyword"'
) do ...