所以这个问题和这个问题, 和这个答案。但我的一些进程名称中有空格,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
我已经尝试过把它放在'
周围NVIDIA Share.exe
,并且我也尝试过把"
它放在周围,但是执行时它仍然会忽略该行。
(我尝试以管理员身份执行 32 位 exe 文件,以管理员身份执行批处理文件以及非管理员身份执行,但都无济于事。)
答案1
for /f
对于如何与正常 tasklist 输出和 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 默认在 RegEx 模式下工作,这意味着搜索词被空格分隔OR
- 每个词都独立匹配。为了解决这个问题,要么用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