2012-11-02 91 views
2

为了运行游戏,我需要启动它的exe两次,然后杀死其中一个rundll32.exe进程。我不想用手工每次都这样做,所以我把它放在一个批处理文件,像这样:用taskkill杀死一个进程

start Gothic2.exe 
start Gothic2.exe 
taskkill /IM rundll32.exe /F 

有RUNDLL32.EXE运行2个实例无一不被杀害,我只需要一个终止其中。 PID没有帮助,因为rundll32.exe每次启动时都会得到一个新的。 如果只有一个进程存在更多的同名进程,我该如何才能杀死它?

回答

3

假设当您启动Gothic2.exe时rundll32.exe会启动并且系统上没有其他进程正在运行,并且还会启动它并且可以杀死第一个rundll32.exe实例,您可以使用此:

start Gothic2.exe 
for /f "tokens=2" %%x in ('tasklist ^| findstr rundll32.exe') do set PIDTOKILL=%%x 
start Gothic2.exe 
taskkill /F /PID %PIDTOKILL% 

我想,如果你想杀死RUNDLL32.EXE的第二个实例,而不是,你可以修改它是这样的:

start Gothic2.exe 
for /f "tokens=2" %%x in ('tasklist ^| findstr rundll32.exe') do set PIDTOSAVE=%%x 
start Gothic2.exe 
for /f "tokens=2" %%x in ('tasklist ^| findstr rundll32.exe ^| findstr /v %PIDTOSAVE%') do taskkill /F /PID %%x 
+0

这样做,谢谢!这证明了我还需要了解批量脚本。 – Serban

1

这是假设你不关心这种情况下您杀人:

@echo off 
for /f "tokens=2 delims=," %%T in ('tasklist /nh /fi "imagename eq rundll32.exe" /fo csv') do (
    echo taskkill /F /pid %%~T 
    goto :eof 
) 

上面的版本只是回应taskkill命令(您可以复制粘贴执行测试),删除echo当您确定它的行为应该如此。