web-dev-qa-db-fra.com

Fermer une application en cours d'exécution à partir de la ligne de commande DOS

La commande start peut lancer une application comme le bloc-notes dans un fichier batch comme celui-ci:

start notepad
start "my love.mp3"

Mais comment fermer l'application en cours d'exécution à partir de la ligne de commande? J'ai trouvé taskkill dans mes recherches mais je ne pense pas que ce soit la bonne commande car elle ne fonctionne pas - elle ne dit pas un tel fichier.

Comment fermer une application lancée avec start?

11
niko

Taskkill est correct. Mais vous devez tuer le processus de lecture du fichier, pas le fichier lui-même. Déterminer le gestionnaire enregistré pour les fichiers mp3 à partir d'une invite de commande sera un peu délicat.

Si vous le savez, vous pouvez tuer ce processus.

Voici un script qui comprend l'application enregistrée pour les fichiers mp3 et tue la tâche:

@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

Si vous l'enregistrez sous killmp3.bat ou quelque chose comme ça, vous pouvez l'appeler quand vous voulez. Bien sûr, sachez que si le programme était déjà en cours d'exécution, en train de faire autre chose, il sera de toute façon fermé.

Notez que cela dépend fortement de l'entrée dans le registre pour avoir le chemin exécutable entre guillemets doubles. Si vous n'avez pas cela et qu'il y a des espaces dans le nom de l'exécutable, cela échouera.

Vous pouvez généraliser ma technique pour pouvoir passer l'extension de fichier (comme .mp3, que vous pouvez rechercher dans le registre pour trouver le nom de la classe mp3file, puis recherchez le gestionnaire à partir de là.

Une solution plus générique qui prend le nom du fichier que vous avez commencé et en déduit l'extension est théoriquement possible mais beaucoup plus difficile. Dans le cas de notepad, vous devez comprendre ce que c'est en recherchant le chemin pour tous les fichiers exécutables, etc.

Cela pourrait être plus simple si vous créez un fichier mp3 extrêmement court que vous pouvez démarrer. Selon le programme, il peut arrêter la lecture du fichier en cours et passer au nouveau, ce qui se terminera presque instantanément et arrêtera efficacement la lecture.

5
ErikE

Entrer taskkill /? pour la syntaxe et quelques exemples. Ce que vous voulez faire, c'est passer le /IM argument utilisant le nom du programme que vous voulez tuer. Par exemple:

TASKKILL /F /IM notepad.exe

va tuer notepad.exe.

TASKKILL /F /IM note*

va tuer tous les processus commençant par "note".

18
Patrick Cuff