批处理文件终止时终止任务

Posted

技术标签:

【中文标题】批处理文件终止时终止任务【英文标题】:Kill task when batch file is terminated 【发布时间】:2016-02-09 18:54:26 【问题描述】:

我正在尝试制作一个在后台播放音乐的批处理文件,例如this 但是,我发现当我按 X 终止文件时,音乐仍在播放。

这是一个很好的示例:

@echo off
set file=http://www.soundjay.com/button/button-2.mp3
( echo Set Sound = CreateObject("WMPlayer.OCX.7"^)
  echo Sound.URL = "%file%"
  echo Sound.Controls.play
  echo do while Sound.currentmedia.duration = 0
  echo wscript.sleep 100
  echo loop
  echo wscript.sleep (int(Sound.currentmedia.duration^)+1^)*1000) >sound.vbs
start /min sound.vbs

我现在有 3 个问题。

    它会在 .bat 本身的目录中创建一个文件。

    之后不会删除。

    它一直播放到结束,然后终止后台程序,但是当我在命令提示符上按 X 时它不会终止它

【问题讨论】:

首先,你需要一个“taskkill”命令来关闭正在播放的音乐/声音。其次,您没有告诉批处理删除任何文件,这可以使用“del”命令完成。创建bat文件所在的文件有什么问题?它应该去其他地方吗?如果是,则使用“cd”命令更改目录 我知道它不会删除它,但我不知道它为什么要创建一个文件。如果它可以是 1 个不下载 mp3,但流式传输且不创建临时文件的执行文件 (.bat),那就太好了。 【参考方案1】:

一种方式:

@Echo Off

set "file=http://www.soundjay.com/button/button-2.mp3"
( echo Set Sound = CreateObject("WMPlayer.OCX.7"^)
  echo Sound.URL = "%file%"
  echo Sound.Controls.play
  echo do while Sound.currentmedia.duration = 0
  echo wscript.sleep 100
  echo loop
  echo wscript.sleep (int(Sound.currentmedia.duration^)+1^)*1000) >sound.vbs
start /min sound.vbs

:loop
set /p $Answer=Press X + Enter to stop ! : 
if /i "%$Answer%"=="x" (
   Taskkill /f /im "wscript.exe" >nul
   del *.mp3
   exit/b
 )
goto:loop

编辑:

如果您想流式传输您的文件,请使用 VLC 命令行选项。如果您希望您的文件在%temp%,您可以先将其移动或下载到%temp%

如果你想让音乐在你点击 [X] 时停止,只需替换:

start /min sound.vbs

cscript //nologo sound.vbs

【讨论】:

这应该解决这个人遇到的所有问题,但“它会在 .bat 本身的目录中创建一个文件。” 感谢@NizonRox。我不知道这是否仍然是一个问题,因为如果按 X,MP3 会被删除。但是如果这是 OP 需要的,则可以将 mp3 下载到另一个目录中。不清楚! 我有时会处理从紧凑的 USB 执行的批处理文件,但如果空间不是问题,那么如果 OP 从他的桌面运行脚本,那么你仍然只是部分正确的原因,那么它将很快就会被 mp3 文件填满 :P 所以为了安全起见我会在开始时添加一个 cd 命令:) 在运行之前移动 Mp3 也是可能的。脚本必须更完整。这只是为了向 OP 展示解决问题的方法。 最好的方法不是下载 mp3,而是流式传输。如果制作了文件,如果您问我,最好在 %temp% 文件夹中。按 x 我的意思是最小化、最大化、关闭窗口的右上角。不过,您的代码有一些问题,我在 sound.vbs,第 4 行,字符 1 中收到 Windows 脚本主机错误。错误:Sound.currentmedia。代码:800A01A8

以上是关于批处理文件终止时终止任务的主要内容,如果未能解决你的问题,请参考以下文章

如何等待进程终止以在批处理文件中执行另一个进程

pythonThreadpool线程池任务终止简单示例

BAT 文件在激活 kivy 脚本时自行终止

如何用批处理文件(.bat)停止或启动windows的服务 ?

如何在批处理文件中执行多个 git 命令而不在第一个命令之后终止?

QProcess 终止进程树