2014-11-30 7 views

Antwort

39

Die grundlegendste, fragen Sie tasklist seinen Ausgang zu filtern und zeigen nur die angegebene ID-Informationen Prozess

tasklist /fi "pid eq 4444" 

nur um den Namen des Prozesses zu erhalten, muss die Linie

for /f "delims=," %%a in (' 
    tasklist /fi "pid eq 4444" /nh /fo:csv 
') do echo %%~a 

In diesem gespaltet werden In diesem Fall wird die Liste der Prozesse ohne Header (/nh) im CSV-Format (/fo:csv) abgerufen. In einigen Windows-Versionen (einer von ihnen, mein Fall ist die spanische Version von Windows XP), die pid Filter in: Die Kommas werden als Token-Trennzeichen und das erste Token in der Zeile ist der Bildname

note verwendet Die Aufgabenliste funktioniert nicht. In diesem Fall muss die Filter über die Liste der Prozesse aus dem Diese generieren die Aufgabenliste und filtern sie die Suche nach der Prozess-ID in der zweiten Spalte der CSV-Ausgabe

for /f "delims=," %%a in (' 
    tasklist /fo:csv /nh ^| findstr /b /r /c:"[^,]*,\"4444\"," 
') do echo %%~a 

Befehl erfolgen.

bearbeitet: alternativ können Sie annehmen, was von dem Team gemacht wurde, das das Betriebssystem ins Spanische übersetzt hat. Ich weiß nicht, was in anderen Ländern passieren kann.

tasklist /fi "idp eq 4444" 
3

nur „native“ Windows-Dienstprogramme verwenden, versuchen Sie die folgenden, wobei „516“ ist die Prozess-ID, die Sie den Bildnamen für wollen:

for /f "delims=," %a in ('tasklist /fi "PID eq 516" /nh /fo:csv') do (echo %~a) 
for /f %a in ('tasklist /fi "PID eq 516" ^| findstr "516"') do (echo %a) 

Oder Sie könnten verwenden wmic (Windows Management Instrumentation Befehl

-Linie-Tool) und den vollständigen Pfad zu der ausführbaren Datei erhalten:

wmic process where processId=516 get name 
wmic process where processId=516 get ExecutablePath 

oder Sie könnten herunterladen Microsoft PsTools oder speziell nur das pslist Dienstprogramm herunterladen und verwenden PsList:

for /f %a in ('pslist 516 ^| findstr "516"') do (echo %a) 
+0

Wenn der Prozess-ID ist weniger als 1000, das 'find' Befehl kann die falschen Linien stimmen mit den Daten in der Speicherspalte in dem Fall von' tasklist' Abruf- oder (niedriger oder höher als 1000) in jedem der numerischen Spalten in den numerischen Spalten 'wmic' oder' pslist'. –

+0

Das Hinzufügen eines Tailing Space löst das Problem nicht (Beispiel: '1.500' in der Speicherspalte). In Tasklist können Sie die Ausgabe filtern ('/ fi'), in wmic können Sie die Ausgabe (' where') filtern, in pslist können Sie die Ausgabe filtern (geben Sie die 'pid' in der Kommandozeile ein). Während 'Grep' ein großartiges Werkzeug ist, muss es hier nicht verwendet werden. –

+1

Alles klar, guter Ruf. Mich dafür arbeiten lassen ... ;-) – Craig

1
@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET /a pid=1600 
FOR /f "skip=3delims=" %%a IN ('tasklist') DO (
SET "found=%%a" 
SET /a foundpid=!found:~26,8! 
IF %pid%==!foundpid! echo found %pid%=!found:~0,24%! 
) 

GOTO :EOF 

... PID entsprechend Ihrer Situation einstellen.

Verwandte Themen