Закройте запущенное приложение из командной строки DOS

Команда запуска может запускать приложение, такое как блокнот в пакетном файле, например:

start notepad
start "my love.mp3"

Но как закрыть запущенное приложение из командной строки? Я нашел taskkill в моих поисках, но я не думаю, что это правильная команда, потому что она не работает — в ней нет такого файла.

Как закрыть приложение, запущенное с помощью start?

Ответ 1

Taskkill правильный. Но вы должны убить процесс воспроизведения файла, а не самого файла. Выяснить, что зарегистрированный обработчик для mp3 файлов из командной строки будет немного сложнее.

Если вы это знаете, вы можете убить этот процесс.

Здесь script, который определяет зарегистрированное приложение для mp3 файлов и убивает задачу:

@echo off
if not .%1==. goto show

:createtemp
set tempfile="%temp%\temp-%random%-%time:~6,5%.bat"
if exist %tempfile% goto :createtemp

reg query HKEY_CLASSES_ROOT\mp3file\shell\play\command\ > %tempfile%

for /F "skip=4 delims=> tokens=2 usebackq" %%e in (`type %tempfile%`) do call %0 %%e

del %tempfile% > nul
set tempfile=
set handler=
set teststring=
set offset=
set cmd=
goto end

:show
set handler=%2
set handler=%handler:~1,-1%
set /A offset=-1

:loop
set cmd=set teststring=%%handler:~%offset%%%
echo %cmd% > %tempfile%
call %tempfile%
if %teststring:~0,1%==\ goto complete
set /A offset=offset-1
goto loop

:complete
set /A offset=offset+1
set cmd=set handler=%%handler:~%offset%%%
echo %cmd% > %tempfile%
call %tempfile%
taskkill /IM %handler% > nul

:end

Если вы сохраните это как killmp3.bat или что-то еще, вы можете вызвать его, когда захотите. Конечно, имейте в виду, что если программа уже запущена, что-то сделать, что она все равно будет закрыта.

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

Вы можете обобщить мою технику, чтобы иметь возможность передать расширение файла (например, .mp3), которое вы могли бы найти в реестре, чтобы найти имя класса mp3file, а затем найти обработчик оттуда.

Более общее решение, которое берет имя файла, который вы начали, и вычисляет расширение из него, теоретически возможно, но намного сложнее. В случае notepad вам нужно выяснить, что это такое, путем поиска пути для всех исполняемых файлов и т.д.

Это может быть проще, если вы создали чрезвычайно короткий mp3 файл, который вы могли бы запустить. В зависимости от программы он может перестать воспроизводить текущий файл и переключиться на новый, что почти мгновенно закончится и эффективно остановит воспроизведение.

Ответ 2

Введите taskkill /? для синтаксиса и некоторых примеров. То, что вы хотите сделать, это передать аргумент /IM, используя имя программы, которую вы хотите убить. Например:

TASKKILL /F /IM notepad.exe

убьет notepad.exe.

TASKKILL /F /IM note*

убьет все процессы, начинающиеся с "note".