Eu recebo invalid GET expression
para o segundo comando.
for /F "usebackq" %%R in ('wmic PROCESS where "commandline like '%%teststr%%'" get Processid,Caption,Commandline') do echo OUTPUT is %%R
Você precisa escapar do ,
(vírgulas) na expressão for
, usando o caractere ^
Escape:
for /F "usebackq" %%R in ('wmic PROCESS where "commandline like '%%teststr%%'" get Processid^,Caption^,Commandline') do echo OUTPUT is %%R
Notas:
- Você também pode adicionar
skip=1
ao comandofor
para pular o cabeçalho. - Você receberá uma linha extra em branco no final da saída
wmic
. - Use
findstr
para remover as linhas em branco dewmic
output, da seguinte maneira:
for /F "usebackq" %%R in ('wmic PROCESS where "commandline like '%%teststr%%'" get Processid^,Caption^,Commandline ^| findstr /r /v "^$"') do echo OUTPUT is %%R
Teste de arquivo em lote:
@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
Exemplo de saída:
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
Leitura Adicional
- Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
- findstr - Pesquise strings em arquivos.
- para / f - Comando Loop contra os resultados de outro comando.
- sintaxe - Escape Characters, Delimiters e Quotes.