如果需要杀死CMD,如何处理批处理文件

时间:2019-06-18 19:19:43

标签: batch-file cmd

我必须编写一个批处理文件,该文件应该杀死所有当前正在运行的CMD进程,但其中一个在回归运行之前处于“侦听”模式。如果在与“回归”相同的路径中存在任何打开的CMD,则会破坏回归。可能有两种方法可以实现此目的: 1.关闭所有命令提示符并启动侦听器(可通过调用软链接来完成)。 2.关闭所有命令提示符,但将运行回归命令的提示符除外。

我试图杀死命令提示符,但是它破坏了回归,因为它杀死了预期会运行回归的cmd。

TASKKILL /F /IM cmd.exe /T
cd %appdata%\Microsoft\Windows\Start Menu\Programs\Startup
"Regression Run.lnk"

如果我继续进行方法1,则尝试杀死所有cmd实例,然后运行链接,一旦调用TASKKILL,则也会杀死运行自身的cmd。其他两行从未被调用过。

对于另一种方法,我无法在调用TASKKILL时获得任何方法来添加任何异常。

如果有人对它有更好的想法或提出实现它的更好方法。

任何指导将不胜感激。

1 个答案:

答案 0 :(得分:0)

这可以通过使用TASKKILL /FI来过滤掉正在运行的当前cmd.exe shell的PID来完成。我想知道一种获取当前cmd.exe PID的简便方法。

@ECHO OFF
SET "TEMPFILE=%TEMP%\regtest.tmp"
powershell -NoProfile -Command ^
    "(Get-WmiObject -Class Win32_Process -Filter "processid=`'$pid`'").ParentProcessId" >"%TEMPFILE%"
SET /P "MYPID=" <"%TEMPFILE%"
ECHO MYPID is set to %MYPID%
IF EXIST "%TEMPFILE%" (DEL "%TEMPFILE%")

TASKLIST /FI "IMAGENAME eq cmd.exe"
TASKKILL /F /FI "PID ne %MYPID%" /IM cmd.exe
TASKLIST /FI "IMAGENAME eq cmd.exe"