tokens through ss64 loop leq geq for equ contents batch bat batch-file for-loop syntax wmic

batch file - through - Para/F+Wmic+WHERE clausule+AND clausule



windows batch loop through file contents (3)

Solo por curiosidad, este comando:

wmic service where (name="themes" and state="running") get

¿Cómo se debe escribir junto con un FOR en un script?

El código a continuación no funciona:

For /F %%a in ( ''wmic service where ^("name=''themes''" and "state=''running''"^) get'' ) do ( echo %%a )


Otra opción más :)

@echo off for /f "delims=" %%A in ( ''wmic service where "name=''themes'' and state=''running''" get'' ) do for /f "delims=" %%B in ("%%A") do echo %%B

Las cláusulas WHERE complejas deben ser citadas o entre paréntesis. Extra interna '' no causa problemas con FOR / F.

Agregué un FOR / F extra para quitar el retorno de carro no deseado que se adjunta al final de cada línea como un artefacto de FOR / F convertir la salida de WMIC Unicode a ANSII. Sin FOR / F adicional, hay una línea adicional que consiste únicamente en un retorno de carro que da como resultado que ECHO is off. al final.

Creo que prefiero la versión de jeb porque elimina la necesidad de escapar durante todo el comando, aunque probablemente usaría comillas simples dentro de la cláusula WHERE. Por ejemplo:

@echo off for /f "delims=" %%A in ( ''"wmic service where (name=''themes'' and state=''running'') get name, pathName"'' ) do for /f "delims=" %%B in ("%%A") do echo %%B

Usar la sintaxis en mi primer ejemplo de código requiere escapar de las comas en la cláusula GET:

@echo off for /f "delims=" %%A in ( ''wmic service where "name=''themes'' and state=''running''" get name^, pathName'' ) do for /f "delims=" %%B in ("%%A") do echo %%B


Puede encerrar el comando wmic completo en comillas simples + dobles, entonces no necesita escapar nada

FOR /F "delims=" %%a in (''"wmic service where (name="themes" and state="running") get"'') do ( echo %%a )


@echo off For /F "usebackq delims=" %%a in (`wmic service where ''name^="themes" and state^="running"'' get`) do ( echo %%a )

este funciona para mí. He usado la opción usebackq para no tener problemas con '' y la sintaxis wmic alternativa - '' lugar de corchetes.