Как обработать пакетный файл, если нужно убить CMD - PullRequest
0 голосов
/ 18 июня 2019

Мне нужно написать командный файл, который должен уничтожить все запущенные в настоящее время процессы CMD, кроме одного, который находится в режиме прослушивания перед запуском регрессии. Если есть какой-либо открытый CMD в том же пути, что и регрессия, он разрушает регрессию. Вероятно, было бы 2 способа достичь этого: 1. Закройте все командные строки и запустите прослушиватель (это можно сделать, вызвав программную ссылку). 2. Закройте все командные строки, кроме той, которая запускает регрессию.

Я пытался уничтожить командные строки, однако он разрушил регрессию, поскольку убил cmd, который, как ожидается, будет выполнять регрессию.

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

Если я продолжу подход 1, попробую уничтожить все экземпляры cmd, а затем запустить ссылку, как только вызов TASKKILL вызовет и сам запущенный cmd. Другие 2 строки никогда не назывались.

Что касается другого подхода, я не могу получить какой-либо метод добавления каких-либо исключений при вызове TASKKILL.

Если у кого-то есть идея получше или предложите лучший способ ее достижения.

Будем весьма признательны за любые указания.

1 Ответ

0 голосов
/ 19 июня 2019

Это можно сделать с помощью TASKKILL /FI, чтобы отфильтровать PID текущей оболочки cmd.exe, которую вы используете.Я хотел бы узнать более простой способ получения текущего PID cmd.exe.

@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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...