中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-07-01 21:23
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎么用批处理播放声音文件啊百度都搜不到 查看 1,848 回复 12
楼 主 怎么用批处理播放声音文件啊百度都搜不到 发表于 2007-06-16 12:28 ·  中国 广东 广州 黄埔区 电信
中级用户
★★
积分 326
发帖 152
注册 2007-05-04 06:16
19年会员
UID 87412
性别 男
状态 离线
就是用命令调用声音文件.
或者VBS也可以...谁能告诉我啊.
2 发表于 2007-06-16 13:18 ·  中国 江西 吉安 电信
中级用户
★★
积分 253
发帖 112
注册 2006-05-31 11:12
20年会员
UID 56308
性别 男
状态 离线
用BAT当播放器用啊???
3 发表于 2007-06-16 16:48 ·  中国 安徽 合肥 电信
初级用户
积分 109
发帖 42
注册 2007-05-12 09:38
19年会员
UID 88253
性别 男
状态 离线
这个是我以前找到的,具体哪个网站忘了,经测试是可以的!

如何在脚本播放一个声音?
问:
嗨,Scripting Guy!我有一个脚本可通过弹出消息框来警告用户发生了问题。有没有办法在弹出消息框的同时播放声音呢?

-- TL

答:
嗨,TL。你们这么做是故意的,不是吗?你们就爱问一些没有明确答案的问题。这次也是这样:您可以搜遍 VBScript 和 WSH 文档,但是您无法找到任何方法可让您通过脚本直接播放声音,即便只是“吱吱”声也办不到。或者,在这种情况下可能是“嘀嘀”声。

因此,必须调用另一个实用程序,以便播放声音。要是声音文件采用 .WAV 格式,最好使用 Windows 录音机。对于这一点,至少有两个理由。首先,录音机较为小巧,可以非常快地进行加载;Media Player 要强大得多,但是对于只是播放“嘀嘀”声,太大材小用了。其次,通过传递适当的命令行参数,可以隐式运行录音机;因此,您(或用户)将听到声音,但不会在屏幕上看到录音机。

以下脚本可以播放 Notify.wav(在 Windows\Media 文件夹下找到的一个标准的操作系统声音文件):

strSoundFile = "C:\Windows\Media\Notify.wav"
Set objShell = CreateObject("Wscript.Shell")
strCommand = "sndrec32 /play /close " & chr(34) & strSoundFile & chr(34)
objShell.Run strCommand, 0, True

该脚本的前两行非常简单。在第一行中,我们将该文件路径指派给了 strSoundFile 变量;在第二行中,我们创建了 Wscript Shell 对象(将用于实际运行录音机的对象)的一个实例。

第三行稍微麻烦一点。为了从命令提示符运行录音机,需要键入该命令:

sndrec32 /play /close "C:\Windows\Media\Notify.wav"
前两个命令行参数告诉录音机播放该文件,然后自动终止;当然,第三个参数就是所要播放的文件的名称。在该例中,不需要对文件路径加双引号;只有当路径名中含有空格时,才需要加引号。我们预先加了引号,以便为您提供模板,供您在播放路径名中确实含有空格的声音文件时使用。因此:

sndrec32 /play /close "C:\Windows\Media\Windows XP Error.wav"
为了对该文件路径加双引号,我们使用了 Chr(34) 命令(可在字符串中插入双引号)。因此,这行代码将 sndrec32 /play /close、前双引号 (“) 文件 C:\Windows\Media\Notify.wav 以及后双引号 (”) 串在了一起:

strCommand = "sndrec32 /play /close " & chr(34) & strSoundFile & chr(34)
最后,在第四行中使用了 Run 方法,传递刚才构建的命令字符串。参数 0 可以让录音机在隐藏窗口中运行;参数 True 告诉该脚本等到声音播放结束后,再重新进行播放。

那么,至于在弹出消息框的同时播放声音,您会发现这几乎不可能;这是因为,录音机需要一两秒的时间来加载并开始播放。最好做两件事。首先,在调用录音机时,使用参数 False;这将告诉该脚本启动录音机并无需等到声音播放结束后就可以继续播放。

其次,使用 Wscript.Sleep 命令将脚本暂停大约一秒钟;从而让录音机有时间进行加载,幸运的话,大约会在弹出消息框时开始播放该声音。能否恰好在弹出消息框的同时播放声音呢?一般不会。但至少可以接近于同时进行。

这里有一个示例脚本也可以大约在弹出消息框的同时播放声音:

strSoundFile = "C:\windows\Media\Notify.wav"
Set objShell = CreateObject("Wscript.Shell")
strCommand = "sndrec32 /play /close " & chr(34) & strSoundFile & chr(34)
objShell.Run strCommand, 0, False
Wscript.Sleep 1000
Msgbox "A problem has occurred."


责任编辑:孤红雪
4 发表于 2007-06-17 17:25 ·  中国 安徽 芜湖 电信
高级用户
★★★
积分 906
发帖 346
注册 2006-07-10 09:58
19年会员
UID 58334
性别 男
状态 离线
我机子改成100毫秒正好同步,嘿嘿
5 发表于 2007-06-17 18:17 ·  中国 北京 中国中信股份有限公司
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
用bat的话可以尝试直接start 声音文件,会自动用相应的播放器来播放。
用vbs的话则有多种方案:
一,使用WMPlayer.OCX
1.1使用URL:

Set oPlayer = CreateObject("WMPlayer.OCX")
oPlayer.URL = "D:\音乐\歌曲\王心凌\彩虹的微笑.mp3"
oPlayer.controls.play
Do
WScript.Sleep 100
Loop Until oPlayer.openState <> 12

WScript.Sleep oPlayer.currentMedia.duration * 1000

1.2使用Playlist:

Set oPlayer = CreateObject("WMPlayer.OCX")
oPlayer.currentPlaylist.appendItem oPlayer.newMedia("D:\音乐\歌曲\王心凌\彩虹的微笑.mp3")
oPlayer.controls.play
Do
WScript.Sleep 100
Loop Until oPlayer.openState <> 12

WScript.Sleep oPlayer.currentMedia.duration * 1000


二.使用SAPI.SpFileStream

Set oVoice = CreateObject("SAPI.SpVoice")
Set oFile = CreateObject("SAPI.SpFileStream.1")

oFile.Open "c:\Windows\Media\Ding.wav"
oVoice.Speakstream oFile,1 '注意这里的参数1加与不加的效果
Wscript.Echo "出错了..."

Set oVoice = Nothing
Set oFile = Nothing

注意:此方案只能播放WAV格式的声音。

另外,使用某些常用第三方软件提供的可被VBS调用的组件也可以实现。
6 发表于 2007-06-17 21:25 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
//用bat的话可以尝试直接start 声音文件,会自动用相应的播放器来播放。

我在XP SP2下用start试了一下,不行。只是弹出一个msdos窗口,并没有播放声音。
3742668斑竹,何解啊?

@echo off
start "C:\WINDOWS\Media\Windows XP Startup.wav"
7 发表于 2007-06-18 00:00 ·  中国 广东 广州 鹏博士宽带
初级用户
★★
积分 176
发帖 78
注册 2007-04-15 10:53
19年会员
UID 85268
性别 男
状态 离线
可能是关联有问题,你查看看关联:cmd /k for /f "tokens=2 delims==" %i in ('assoc .wav') do ftype %i
8 发表于 2007-06-18 01:28 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
Originally posted by HAT at 2007-6-17 21:25:
//用bat的话可以尝试直接start 声音文件,会自动用相应的播放器来播放。

我在XP SP2下用start试了一下,不行。只是弹出一个msdos窗口,并没有播放声音 ...

@echo off
start "" "C:\WINDOWS\Media\Windows XP Startup.wav"
9 发表于 2007-07-31 05:40 ·  中国 广东 东莞 电信
中级用户
★★
积分 326
发帖 152
注册 2007-05-04 06:16
19年会员
UID 87412
性别 男
状态 离线
set mp3=c:\opera.mp3
copy /y "C:\Program Files\Windows Media Player\wmplayer.exe" %windir%\system32\
start /min wmplayer "%mp3%"
10 发表于 2007-07-31 16:16 ·  中国 四川 攀枝花 电信
初级用户
积分 34
发帖 17
注册 2007-06-29 21:46
19年会员
UID 92719
性别 男
来自 介休
状态 离线
哈,学习了,谢谢各位高人
11 发表于 2007-08-01 06:28 ·  中国 广东 东莞 电信
中级用户
★★
积分 326
发帖 152
注册 2007-05-04 06:16
19年会员
UID 87412
性别 男
状态 离线
Set oPlayer = CreateObject("WMPlayer.OCX")
oPlayer.URL = "d:\有一种爱叫做放手.mp3"
oPlayer.controls.play
Do
WScript.Sleep 100
Loop Until oPlayer.openState <> 12

WScript.Sleep oPlayer.currentMedia.duration * 1000
12 发表于 2007-08-02 22:57 ·  中国 安徽 马鞍山 电信
初级用户
积分 20
发帖 11
注册 2007-08-02 21:06
18年会员
UID 94527
性别 男
状态 离线
用mplayer可以在DOS下播放音乐
mplayer.exe "C:\Documents and Settings\Administrator\My Documents\My Music\朋友.mp3"

我的网盘中有这个软件
http//ngd.ys168.com
13 发表于 2010-01-05 07:45 ·  中国 广东 深圳 联通
初级用户
少帅
积分 42
发帖 24
注册 2009-12-17 20:53
16年会员
UID 156814
性别 男
来自 深圳
状态 离线
做记号
论坛跳转: