Закройте работающее приложение из командной строки DOS - PullRequest
11 голосов
/ 15 июля 2011

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

start notepad
start "my love.mp3"

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

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

Ответы [ 2 ]

18 голосов
/ 15 июля 2011

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

TASKKILL /F /IM notepad.exe

уничтожит notepad.exe.

TASKKILL /F /IM note*

уничтожит все процессы, начинающиеся с «note».

5 голосов
/ 15 июля 2011

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

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

Вот скрипт, который вычисляет зарегистрированное приложениедля 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-файлчто вы можете начать. В зависимости от программы, он может прекратить воспроизведение текущего файла и переключиться на новый, который закончится почти мгновенно и эффективно остановит воспроизведение.

...