从 DOS 命令行关闭正在运行的应用程序

Posted

技术标签:

【中文标题】从 DOS 命令行关闭正在运行的应用程序【英文标题】:Close a running application from DOS command line 【发布时间】:2011-10-05 21:09:33 【问题描述】:

启动命令可以在批处理文件中启动像记事本这样的应用程序,如下所示:

start notepad
start "my love.mp3"

但是如何从命令行关闭正在运行的应用程序?我在搜索中找到了taskkill,但我认为这不是正确的命令,因为它不起作用——它说没有这样的文件。

如何关闭使用start 启动的应用程序?

【问题讨论】:

Niko 你运行的是什么版本的 Windows? 【参考方案1】:

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 文件,这可能会更简单。根据程序,它可能会停止播放当前文件并切换到新文件,这几乎会立即结束并有效地停止播放。

【讨论】:

谢谢你。但是我怎么知道你能给我任何执行操作的示例批处理文件吗? 请告诉我如何使用 taskkill 杀死应用程序,比如记事本。我如何找到已注册的处理程序?执行此操作的任何命令 Erike 你能帮我一些忙吗?在我的 pc dos 命令中,它说 taskkill 命令无法识别如何更新 dos 中的命令?任何想法 @Niko 再次查看编辑。我评论了您的问题,询问您正在运行什么版本的 Windows。【参考方案2】:

输入taskkill /? 获取语法和一些示例。您要做的是使用您要杀死的程序的名称传递/IM 参数。例如:

TASKKILL /F /IM notepad.exe

将杀死notepad.exe。

TASKKILL /F /IM note*

将杀死所有以“note”开头的进程。

【讨论】:

以上是关于从 DOS 命令行关闭正在运行的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

c语言中啥指令可以关闭dos窗口

C++中如何同时运行俩个dos命令?

Dos批处理命令bat文件运行完以后自动关闭dos窗口的方法

DOS命令行(11)——更多实用的命令行工具

从 DOS 命令行运行 JUnit 测试时出错

在命令行下面打开我自己的程序后CMD不退出,一直等待!!