nik*_*iko 11 command-line dos batch-file taskkill kill-process
start命令可以在批处理文件中启动像记事本这样的应用程序,如下所示:
start notepad
start "my love.mp3"
Run Code Online (Sandbox Code Playgroud)
但是如何从命令行关闭正在运行的应用程序?我发现taskkill
在我的搜索中,但我不认为这是正确的命令,因为它不起作用 - 它说没有这样的文件.
如何关闭启动的应用程序start
?
Pat*_*uff 18
输入taskkill /?
语法和一些示例.你想要做的是/IM
使用你要杀死的程序的名称传递参数.例如:
TASKKILL /F /IM notepad.exe
Run Code Online (Sandbox Code Playgroud)
将杀死notepad.exe.
TASKKILL /F /IM note*
Run Code Online (Sandbox Code Playgroud)
将杀死以"note"开头的所有进程.
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
Run Code Online (Sandbox Code Playgroud)
如果您将其另存为killmp3.bat
,则可以在需要时调用它.当然要知道,如果程序已经运行,做其他事情,那么无论如何它都将被关闭.
请注意,这在很大程度上取决于注册表中的条目,以使可执行路径在双引号内.如果您没有,并且可执行文件名中有空格,则会失败.
您可以概括我的技术,以便能够传入文件扩展名(例如.mp3
,您可以在注册表中查找以查找类名mp3file
,然后从那里找到处理程序.
一个更通用的解决方案,它采用你开始的文件的名称,并从中找出它的扩展,理论上是可能的,但更难.如果notepad
你必须通过搜索所有可执行文件的路径等来弄清楚它是什么.
如果您创建了一个可以启动的极短的mp3文件,这可能会更简单.根据程序的不同,它可能会停止播放当前文件并切换到新文件,这将几乎立即结束并有效地停止播放.