web-dev-qa-db-ja.com

DOSコマンドラインから実行中のアプリケーションを閉じる

Startコマンドは、次のようなバッチファイルでメモ帳のようなアプリケーションを起動できます。

start notepad
start "my love.mp3"

しかし、コマンドラインから実行中のアプリケーションを閉じるにはどうすればよいですか?検索でtaskkillを見つけましたが、機能していないため、適切なコマンドではないと思います。そのようなファイルはありません。

startで起動したアプリケーションを閉じるにはどうすればよいですか?

11
niko

タスクキルは正しいです。ただし、ファイル自体ではなく、ファイルを再生するプロセスを強制終了する必要があります。コマンドプロンプトからの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ファイルを作成した場合、これはより簡単になる可能性があります。プログラムによっては、現在のファイルの再生を停止して新しいファイルに切り替える場合があります。これにより、ほぼ瞬時に終了し、効果的に再生が停止します。

5
ErikE

入る taskkill /?構文といくつかの例。あなたがやりたいことは、/IM引数には、強制終了するプログラムの名前を使用します。例えば:

TASKKILL /F /IM notepad.exe

notepad.exeを強制終了します。

TASKKILL /F /IM note*

「note」で始まるすべてのプロセスを強制終了します。

18
Patrick Cuff