Windows

從任務列表傳遞 PID 並使用任務列表中的程序名稱中的空格殺死程序

  • July 24, 2018

所以這個問題與這個問題非常相似,有這個答案。但是我的一些程序名稱中有空格,CMD 什麼也不返回。我的原始問題已在此答案中得到解答,此問題是詢問我將如何做到這一點,但程序名稱中有空格。

到目前為止的程式碼:

FOR /F "usebackq tokens=1-10" %%i IN (`tasklist ^|findstr /b "nvsphelper64.exe"`) DO taskkill /F /PID %%j
FOR /F "usebackq tokens=1-10" %%i IN (`tasklist ^|findstr /b "nvcontainer.exe"`) DO taskkill /F /PID %%j
FOR /F "usebackq tokens=1-10" %%i IN (`tasklist ^|findstr /b "NVIDIA Share.exe"`) DO taskkill /F /PID %%j
pause

我已經嘗試過 put 'around NVIDIA Share.exe,並且我也嘗試過 put "around 它,但是它在執行時仍然忽略了該行。

(我曾嘗試以管理員身份作為 32 位 exe 執行,並以管理員身份和不使用管理員的批處理方式執行,但無濟於事。)

似乎有一些誤解是如何for /f與正常的任務列表輸出和 findstr 結合使用的。

> tasklist

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
System Idle Process              0 Services                   0          8 K
System                           4 Services                   0      4.896 K
...snip...

預設For /f分隔符是空格,您不要更改它。

連續的定界符計為一個,而前導的定界符將被忽略。

因此,要在行中獲取 PID,System Idle Process您必須解決令牌 4,在下一行System中,PID 是令牌 2。

Findstr OTOH 預設在 RegEx 模式下工作,這意味著由空格分隔的搜尋詞是ORed - 每個獨立匹配。為了克服這個問題,要麼NVIDIA Share.exe用表示任何字元的點交換空格 - 要麼切換到/C:"NVIDIA Share.exe"字面匹配。(要完全匹配 RegEx 中的文字點,您必須使用反斜杠對其進行轉義。

所以這應該適合你:

FOR /F "tokens=2" %%A IN ('tasklist ^|findstr /b "nvsphelper64\.exe" ') DO taskkill /F /PID %%A
FOR /F "tokens=2" %%A IN ('tasklist ^|findstr /b "nvcontainer\.exe"  ') DO taskkill /F /PID %%A
FOR /F "tokens=3" %%A IN ('tasklist ^|findstr /b "NVIDIA.Share\.exe" ') DO taskkill /F /PID %%A
pause

引用自:https://serverfault.com/questions/923211