WMIC in For-Schleife

WMIC in For-Schleife

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 expressionfü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 expressionden 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 forAusdruck 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=1Möglicherweise möchten Sie dem Befehl auch hinzufügen, fordass die Kopfzeile übersprungen werden soll.
  • Sie erhalten am Ende der Ausgabe eine zusätzliche Leerzeile wmic.
  • Verwenden Sie es findstr, um die leeren Zeilen wmicwie 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.

verwandte Informationen