首页 > 解决方案 > 用批处理创建音乐

问题描述

我想知道是否有某种方式可以批量处理音乐,而不仅仅是从 cmd 打开一个 mp3 文件,而是使用命令来做笔记或类似的东西。如果真的没有怎么做,我理解。

标签: batch-file

解决方案


batch 可以通过创建和启动 vbs 脚本来播放音乐,以利用内部 windows 媒体播放器。

注意:在以下所有脚本中,变量 %sounds% 指的是您的声音脚本所在的文件夹,并且必须定义。

播放音乐的核心是下面的 Batch Script:

@Echo off & REM MusicPlayer.bat

    Set "MusicPath=%~1" & REM Full Path for the music file
    Set "vol=%~2" & REM Volume as number between 0 and 100
    Set "LoopTF=%~3" & REM 'paramater 3 as 'true' or 'false' determines if the track is to be looped.

    (
    PUSHD %sounds%
    %= Change to the directory your sound files are located =%)

::: Ensure no Conflict with the Previous Script.

    IF exist PlayMusic.vbs (
    DEL PlayMusic.vbs
    )

::: Creates a vbs Script to launch the music (Occurs without any visual indication or prompting)

    (
    echo Set Sound = CreateObject("WMPlayer.OCX.7"^)
    echo Sound.URL = "%MusicPath%"
    echo Sound.settings.volume = %vol%
    echo Sound.settings.setMode "loop", %LoopTF%
    echo Sound.Controls.play
    echo While Sound.playState ^<^> 1
    echo      WScript.Sleep 100
    echo Wend
    echo Sound objTS = Nothing 'Destroy the object.
    )>PlayMusic.vbs

    start /min PlayMusic.vbs

    (
    POPD
    %= Return to your Previous Directory =%)
::: Exit the Launcher and return to Previous batch program.

    GOTO :EOF

上面的脚本使用 3 个参数作为 Remarked 调用。

另一个 Vbs 可用于监控批处理的状态,并在批处理关闭时调用批处理脚本来停止音乐:

@Echo off & REM Monitor.bat

(
ECHO Set objWMIService = GetObject ("winmgmts:"^)
ECHO Set proc = objWMIService.ExecQuery("select * from Win32_Process Where Name='cmd.exe'"^)
ECHO DO while proc.count ^> 0
ECHO Set proc = objWMIService.ExecQuery("select * from Win32_Process Where Name='cmd.exe'"^)
ECHO if proc.count ^< 1 then exit do
ECHO wscript.sleep 1500
ECHO loop
ECHO Set WshShell=createobject("wscript.shell"^)
ECHO WshShell.run "%sounds%\KillMusic.bat", 0, true
)>%sounds%\MusicMonitor.vbs

start %sounds%\MusicMonitor.vbs
Goto :EOF

上面的脚本创建了一个隐藏的 vbs,它通过 objWMIService.ExecQuery 获取 cmd.exe 的实例数。这发生在循环期间,中断条件为 0 打开 cmd.exe 窗口。循环中内置了睡眠,以减少对 WMI 服务的调用频率,因为这些调用非常耗费资源。当循环中断发生时,它会在隐藏状态下启动 killmusic.bat 程序。

下面的脚本“KillMusic.bat”在您的退出标签中直接调用,或者在确定 Cmd.exe 不再运行时由 vbs 监视器调用。DoMonitor是在调用 killmusic 之前在主脚本中更改的变量。1表示应该重新启动监视器,并且在 killmusic.bat 停止当前播放的歌曲以开始新歌曲时使用。Monitor是一个包含 Monitor.bat 路径的变量

@ECHO OFF & REM KillMusic.bat

    taskkill /pid WScript.exe /f /t >nul

    IF exist "%sounds%\PlayMusic.vbs" (
        DEL /Q "%sounds%\PlayMusic.vbs"
    )

    Timeout 1 > nul

    IF "%DoMonitor%"=="1" GOTO reset

GOTO :EOF

:reset

    CALL "%Monitor%"

GOTO :EOF

这三个程序可以在这里看到效果。


推荐阅读