WMIC en for-loop

1

Estoy tratando de obtener la salida de WMIC en una variable para poder procesarla aún más.

He hecho un archivo por lotes de prueba para ilustrar el problema:

wmic PROCESS where "commandline like '%%teststr%%'" get     Processid,Caption,Commandline
for /F "usebackq" %%R in (`wmic PROCESS where "commandline like '%%teststr%%'" get Processid,Caption,Commandline`) do echo OUTPUT is %%R

Habiendo llamado a este lote obtengo el resultado esperado para la primera línea, pero invalid GET expressionpara la segunda.

Dado que la primera línea funciona, creo que hay algo mal con mi cita: ¿alguien podría arrojar una luz sobre esto? Lo comprobé tres veces sintácticamente y todo me parece correcto de acuerdo con esta otra pregunta: salida Wmic en variable

Edit1:% teststr% es solo una cadena para filtrar, podría ser javaw, por ejemplo, buscar ciertas instancias de java.

Edit2: la salida exacta es:

Caption    CommandLine                                                                                                                  ProcessId
javaw.exe  "C:\Program Files (x86)\Java\jre1.8.0_91\bin\javaw.exe" -jar "J:\tools\sonst\jEdit\jedit.jar" -reuseview -background -nogui  5152
javaw.exe  "C:\Program Files (x86)\Java\jre1.8.0_91\bin\javaw.exe" -jar "J:\tools\sonst\jEdit\jedit.jar" -reuseview -background -nogui  11504
javaw.exe  "c:\Program Files (x86)\Java\jdk1.7.0_80\bin\javaw.exe"  -jar "j:\tools\online\JBinUp\JBinUp.jar"                            16336
WMIC.exe   wmic  PROCESS where "commandline like '%javaw%'" get Processid,Caption,Commandline                                           18740

Invalid GET Expression.

cama y desayuno

oso cerveza
fuente
¿Qué es %%teststr%%?
DavidPostill
¿Por qué tienes but ´al final de tu primer comando? Y Commandlinno está escrito correctamente.
DavidPostill
¿Cuál es la salida de wmic PROCESS where "commandline like '%%teststr%%'" get Processid,Caption,Commandline?
DavidPostill
Por favor, editar la pregunta, corregir los errores y añadir la información adicional.
DavidPostill
Listo: fue solo un error de pegado, el archivo por lotes era correcto.
beerbear

Respuestas:

3

Tengo invalid GET expressionel segundo comando.

for /F "usebackq" %%R in (`wmic PROCESS where "commandline like '%%teststr%%'" get Processid,Caption,Commandline`) do echo OUTPUT is %%R

Debe escapar de las ,(comas) en la forexpresión, utilizando el ^ carácter de Escape:

for /F "usebackq" %%R in (`wmic PROCESS where "commandline like '%%teststr%%'" get Processid^,Caption^,Commandline`) do echo OUTPUT is %%R

Notas:

  • También es posible que desee agregar skip=1al forcomando para omitir el encabezado.
  • Obtendrá una línea en blanco adicional al final de la wmicsalida.
  • Use findstrpara quitar las líneas en blanco de la wmicsalida, de la siguiente manera:
for /F "usebackq" %%R in (`wmic PROCESS where "commandline like '%%teststr%%'" get Processid^,Caption^,Commandline ^| findstr /r /v "^$"`) do echo OUTPUT is %%R

Probar archivo por lotes:

@echo off
setlocal EnableDelayedExpansion
wmic process where "Commandline like '%%note%%'" get Processid,Caption,Commandline
for /f "usebackq" %%r in (`wmic process where "commandline like '%%note%%'" get Processid^,Caption^,Commandline ^| findstr /r /v "^$"`) do echo OUTPUT is %%r
endlocal

Salida de ejemplo:

F:\test>test
Caption                   CommandLine                                                                                                                            ProcessId
GSNotes.exe               "E:\GoldenSectionNotes\GSNotes.exe"                                                                                                    8864
LiberKeyPortabilizer.exe  "E:\LiberKey\LiberKeyTools\LiberKeyPortabilizer\LiberKeyPortabilizer.exe" /app="E:\LiberKey\Apps\Notepad++\Notepad++LKL.dat"  /lkpend  12324
notepad++.exe             "E:\LiberKey\Apps\Notepad++\App\Notepad++\notepad++.exe"                                                                               11948
WMIC.exe                  wmic  process where "Commandline like '%note%'" get Processid,Caption,Commandline                                                      1364

OUTPUT is Caption
OUTPUT is GSNotes.exe
OUTPUT is LiberKeyPortabilizer.exe
OUTPUT is notepad++.exe
OUTPUT is cmd.exe
OUTPUT is WMIC.exe

Otras lecturas

DavidPostill
fuente