Windows
從任務列表傳遞 PID 並使用任務列表中的程序名稱中的空格殺死程序
所以這個問題與這個問題非常相似,有這個答案。但是我的一些程序名稱中有空格,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
'
aroundNVIDIA 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 模式下工作,這意味著由空格分隔的搜尋詞是
OR
ed - 每個獨立匹配。為了克服這個問題,要麼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