Batch file 从批处理脚本中打开cmd,运行命令并关闭以前打开的终端

Batch file 从批处理脚本中打开cmd,运行命令并关闭以前打开的终端,batch-file,cmd,terminal,Batch File,Cmd,Terminal,我制作了一个小的终端菜单,在那里我可以在一个新的cmd中运行几个终端命令 下面是一个非常压缩的示例: SET /P env=your conda env: ... ECHO 2 - Run Rasa Action Server ... IF %M%==2 GOTO RUN_RASA_ACTION_SERVER ... :RUN_RASA_ACTION_SERVER start cmd.exe /k call conda ac

我制作了一个小的终端菜单,在那里我可以在一个新的cmd中运行几个终端命令

下面是一个非常压缩的示例:

    SET /P env=your conda env:    
    ...
    ECHO 2 - Run Rasa Action Server
    ...
    IF %M%==2 GOTO RUN_RASA_ACTION_SERVER
    ...
    :RUN_RASA_ACTION_SERVER
    start cmd.exe /k call conda activate %env% ^&^& cd.. ^&^& call rasa run actions
    CLS
    GOTO MENU
在本部分中,我将在新的cmd终端的端口5055上启动一个运行的操作服务器。 我还想通过终端菜单终止任务

以下是我目前得到的信息:

...
ECHO 6 - Kill Rasa Action Server
...
IF %M%==6 GOTO KILL_RASA_ACTION_SERVER
...
:KILL_RASA_ACTION_SERVER
FOR /F "tokens=5" %%T IN ('netstat -a -n -o ^| findstr "5055" ') DO (
SET /A ProcessId=%%T) &GOTO SkipLine



:SkipLine                                                                              
taskkill /f /pid %ProcessId%
CLS
GOTO MENU
这是工作正常,但…以前打开的终端仍然是开放的,我想杀死任务,并关闭cmd终端之后

我怎样才能做到这一点?我尝试退出,但总是关闭终端主菜单

之前打开的终端仍然打开,我想终止任务,然后关闭cmd终端

为要打开的Shell窗口设置窗口标题

SET/P env=您的康达环境:
雷姆。。。
ECHO 2-运行Rasa操作服务器
雷姆。。。
如果%M%==2转到运行\u RASA\u操作\u服务器
雷姆。。。
:运行\u RASA\u操作\u服务器
启动“KILL_ME_PLEASE”cmd.exe/k调用conda激活%env%^&^&cd..^&^&调用rasa运行操作
CLS
转到菜单
然后在另一个部分中,您只需找到带有该标题的CMD窗口,并杀死它和它产生的任何进程

REM。。。
ECHO 6-杀死Rasa操作服务器
雷姆。。。
如果%M%==6,则转到杀死\u RASA\u操作\u服务器
雷姆。。。
:KILL_RASA_ACTION_服务器
对于/F“令牌=2”%%uu英寸('
任务列表-v/FI“ImageName eq cmd.exe”^|查找“KILL_ME_PLEASE”
""做"(
TaskKill/T/F/PID%%_
)
CLS
转到菜单

以前打开的终端是哪一个?你要杀的那个人
for/f“tokens=5”%%a in('netstat-a-n-o^ | findstr“5055“')do taskkill/f/pid%%a
@GerhardBarnard是的,我在主控制台中键入数字2,打开一个新的终端,服务器在其中启动,过一会儿我将关闭服务器,我在主菜单中键入6,启动服务器的新cmd应该关闭OK,因此尝试在('netstat-a-n-o^ findstr“5055')中为/f“tokens=5”%%a执行taskkill/f/pid%%a@GerhardBarnard我尝试了此操作,但不幸的是它关闭了“主菜单终端”,我想关闭另一个。然后你需要确定该终端的pid谢谢,这正是我需要的@我很乐意帮忙!