batch-file - 用批处理创建音乐
问题描述
我想知道是否有某种方式可以批量处理音乐,而不仅仅是从 cmd 打开一个 mp3 文件,而是使用命令来做笔记或类似的东西。如果真的没有怎么做,我理解。
解决方案
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
推荐阅读
- openmdao - InterpND for one dimension
- python - How do I get the values under cursor instead of coords?
- oracle - I'd like to return a single row in a query that joins two tables through a one to many relationship
- python - Python convert zip file to bytes stream
- html - What's the best way to unwrap tags with nokogiri?
- angular - Play An MP3 in Angular Using
- python - Python:从json中提取第二级到数据框
- r - 具有两个关键列的gather()
- regex - Hive rlike 匹配词边界
- linux - Can the pktgen tool be used to send different types of network packets on one port?