откройте cmd из batch-script, запустите команду и закройте ранее открытый терминал - PullRequest
0 голосов
/ 17 октября 2019

Я сделал небольшое меню терминала, где я могу запустить несколько команд терминала в новом 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

В этой части я запускаю сервер действий, работающий на порту 5055, в новом терминале cmd. Я также хочу убить задачу через меню терминала.

так вот что я получил до сих пор:

...
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 после этого.

Как мне этого добиться? Я попробовал EXIT, но я всегда закрываю главное меню терминала.

1 Ответ

1 голос
/ 17 октября 2019

Ранее открытый терминал все еще открыт, я хочу убить задачу и закрыть терминал cmd после этого.

Установить заголовок окна для открываемого окна оболочки

SET /P env=your conda env:    
 REM ...
ECHO 2 - Run Rasa Action Server
 REM ...
IF %M%==2 GOTO RUN_RASA_ACTION_SERVER
 REM ...
:RUN_RASA_ACTION_SERVER
start "KILL_ME_PLEASE" cmd.exe /k call conda activate %env% ^&^& cd.. ^&^& call rasa run actions
CLS
GOTO MENU

Затем в разделе Other вы просто находите окно CMD с этим заголовком и уничтожаете его, а также любой процесс, который он порождал.

 REM ...
ECHO 6 - Kill Rasa Action Server
 REM ...
IF %M%==6 GOTO KILL_RASA_ACTION_SERVER
 REM ...
:KILL_RASA_ACTION_SERVER
FOR /F "Tokens=2" %%_ IN ('
  TaskList -v /FI "ImageName eq cmd.exe" ^| FIND "KILL_ME_PLEASE"
') DO (
  TaskKill /T /F /PID %%_
)
CLS
GOTO MENU
...