Итак, этот вопрос ОЧЕНЬ похож на этот вопрос, с участием этот ответ. Но в имени некоторых моих процессов есть пробел, и 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 как администратор и как пакет как администратор и без администратора, но безрезультатно.)
Кажется, есть недопонимание, как 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