如何在批处理中使用/ do循环杀死名称中包含空格的进程?

时间:2016-02-23 09:05:10

标签: batch-file cmd

我有这批来杀死一些过程!

@echo off
set process=Program with space.exe,winword.exe,Opera.exe,mshta.exe,chrome.exe,calc.exe,skype.exe,iexplore.exe
set Tmp=Tmp.txt
set LogFile=ProcessKillerLog.txt
If Exist %Tmp% Del %Tmp%
If Exist %LogFile% Del %LogFile%
For %%a in (%process%) Do Call :KillMyProcess %%a %Tmp%
Cmd /U /C Type %Tmp% > %LogFile%
If Exist %Tmp% Del %Tmp%
Exit /b

:KillMyProcess
Taskkill /IM "%1" /F /T >>%2 2>&1

所以我的目标是杀死一个名为Program with space.exe的空间进程,我应该修改什么? 谢谢!

1 个答案:

答案 0 :(得分:2)

第一个问题是For %%a in (%process%) Do,因为这会在空格和逗号中分割%process%的内容,因此您将Programwith spaces视为三个条目。
你应该首先引用它们。

set process="Program with space.exe",winword.exe, ...

call :KillMyProcess对内容有潜在危险,但在您的情况下可行。

但是,现在你得到一些你的流程名称和一些没有引号的你应该将taskkill更改为"%~1",所以首先删除引号然后再次添加。

:KillMyProcess
Taskkill /IM "%~1" /F /T >>%2 2>&1