我想知道是否有一些方法可以用batch来做音乐,而不仅仅是从cmd打开一个mp3文件,而是命令来做笔记或类似的事情。如果真的不知道该怎么做,我理解。
发布于 2020-04-15 10:41:13
batch可以通过创建和启动vbs脚本来播放音乐,以利用内部的windows media player。
注意:在下面的所有脚本中,变量%sounds%表示您的声音脚本所在的文件夹,必须对其进行定义。
播放音乐的核心是以下批处理脚本:
@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个参数调用上述脚本。
另一个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程序。
当vbs监视器确定Cmd.exe不再运行时,可以直接在您的退出标签中调用下面的脚本"KillMusic.bat“。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 :EOFhttps://stackoverflow.com/questions/61219637
复制相似问题