![WMIC en bucle for](https://rvso.com/image/1493930/WMIC%20en%20bucle%20for.png)
Estoy intentando convertir la salida WMIC en una variable para poder procesarla más.
He creado 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
Después de llamar a este lote, obtengo el resultado esperado para la primera línea, pero invalid GET expression
para la segunda.
Dado que la primera línea funciona, creo que hay algún problema con mi cita. ¿Podría alguien arrojar luz sobre esto? Lo revisé tres veces sintácticamente y me parece todo correcto según esta otra pregunta:Salida Wmic en variable
Edit1: %teststr% es solo una cadena para filtrar, podría ser javaw, por ejemplo, para 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
Respuesta1
Recibo invalid GET expression
el segundo comando.
for /F "usebackq" %%R in (`wmic PROCESS where "commandline like '%%teststr%%'" get Processid,Caption,Commandline`) do echo OUTPUT is %%R
Debes escapar de las ,
(comas) en la for
expresión, usando el ^
carácter Escape:
for /F "usebackq" %%R in (`wmic PROCESS where "commandline like '%%teststr%%'" get Processid^,Caption^,Commandline`) do echo OUTPUT is %%R
Notas:
- Es posible que también desee agregar
skip=1
alfor
comando para omitir el encabezado. - Obtendrá una línea en blanco adicional al final del
wmic
resultado. - Úselo
findstr
para eliminar las líneas en blanco dewmic
la salida, 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
Archivo por lotes de prueba:
@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
- Un índice AZ de la línea de comando CMD de Windows- Una excelente referencia para todo lo relacionado con la línea cmd de Windows.
- encontrartr- Buscar cadenas en archivos.
- para /f- Comando de bucle contra los resultados de otro comando.
- sintaxis- Caracteres de escape, delimitadores y comillas.