2013-10-21 8 views
6

Solo per curiosità, questo comando:Per/F + Wmic + DOVE clausule + E clausule

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

Come dovrebbe essere scritta insieme a un FOR in uno script?

Il codice qui sotto non funziona:

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

citazioni singole indica la fine del comando analizzata ... ?? – npocmaka

+0

'=' è delimitatore e dovrebbe essere sfuggito – npocmaka

+0

Grazie mille @npocmaka ma l'ho provato, non funziona – ElektroStudios

risposta

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

questo funziona per me.I've utilizzato usebackq possibilità di avere problemi con ' e alternativa sintassi wmic - ' invece di parentesi.

9

È possibile racchiudere il comando wmic completo in virgolette singole + doppie, quindi non c'è bisogno di sfuggire nulla

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

aah.Per questo. + 1 – npocmaka

+1

Sì, entrambe le soluzioni sono ottime, ho appena segnato la risposta della persona che ha risposto per prima, ma grazie ad entrambi i ragazzi! – ElektroStudios

9

Ancora un'altra opzione :)

@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 

complesso in cui le clausole devono essere o quotati o tra parentesi. L'extra interno ' non causa problemi con FOR/F.

Ho aggiunto un extra FOR/F per rimuovere il ritorno a capo indesiderato che viene aggiunto alla fine di ogni riga come un artefatto di FOR/F che converte l'output Unicode WMIC in ANSII. Senza il FOR/F aggiuntivo, vi è una riga aggiuntiva che consiste esclusivamente di un ritorno a capo che risulta in ECHO is off. alla fine.

Penso che preferisco la versione di jeb perché elimina la necessità di escape nell'intero comando, anche se probabilmente utilizzerei virgolette singole all'interno della clausola WHERE. Per esempio:

@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 

Utilizzando la sintassi nel mio primo esempio di codice richiede sfuggire le virgole nella clausola 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