![WMIC in For-Schleife](https://rvso.com/image/1493930/WMIC%20in%20For-Schleife.png)
Ich versuche, die WMIC-Ausgabe in eine Variable zu konvertieren, damit ich sie weiterverarbeiten kann.
Ich habe eine Test-Batchdatei erstellt, um das Problem zu veranschaulichen:
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
Nachdem ich diesen Batch aufgerufen habe, erhalte ich die erwartete Ausgabe für die erste Zeile, aber invalid GET expression
für die zweite.
Da die erste Zeile funktioniert, glaube ich, dass mit meinem Zitat etwas nicht stimmt. Kann mir bitte jemand weiterhelfen? Ich habe die Syntax dreimal überprüft und gemäß dieser anderen Frage scheint mir alles richtig zu sein:Wmic-Ausgabe in Variable
Edit1: %teststr% ist nur eine zu filternde Zeichenfolge, es könnte beispielsweise javaw sein, um nach bestimmten Java-Instanzen zu suchen.
Edit2: Die genaue Ausgabe ist:
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.
BB
Antwort1
Ich verstehe invalid GET expression
den zweiten Befehl.
for /F "usebackq" %%R in (`wmic PROCESS where "commandline like '%%teststr%%'" get Processid,Caption,Commandline`) do echo OUTPUT is %%R
Sie müssen die ,
(Kommas) im for
Ausdruck mit dem ^
Escape-Zeichen maskieren:
for /F "usebackq" %%R in (`wmic PROCESS where "commandline like '%%teststr%%'" get Processid^,Caption^,Commandline`) do echo OUTPUT is %%R
Anmerkungen:
skip=1
Möglicherweise möchten Sie dem Befehl auch hinzufügen,for
dass die Kopfzeile übersprungen werden soll.- Sie erhalten am Ende der Ausgabe eine zusätzliche Leerzeile
wmic
. - Verwenden Sie es
findstr
, um die leeren Zeilenwmic
wie folgt aus der Ausgabe zu entfernen:
for /F "usebackq" %%R in (`wmic PROCESS where "commandline like '%%teststr%%'" get Processid^,Caption^,Commandline ^| findstr /r /v "^$"`) do echo OUTPUT is %%R
Test-Batchdatei:
@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
Beispielausgabe:
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
Weitere Informationen
- Ein AZ-Index der Windows CMD-Befehlszeile- Ein hervorragendes Nachschlagewerk zu allem, was mit der Windows-Eingabeaufforderung zu tun hat.
- Suche- Suche nach Zeichenfolgen in Dateien.
- für /f- Befehl mit den Ergebnissen eines anderen Befehls wiederholen.
- Syntax- Escape-Zeichen, Trennzeichen und Anführungszeichen.