windows 如何启动一个系统“哔哔声”,从内置的pc扬声器,使用批处理文件?

ego6inou  于 2022-12-30  发布在  Windows
关注(0)|答案(9)|浏览(234)

我写了一个交互模式的批处理脚本,用于执行一些任务。
有时,这些任务需要很长时间才能完成,然后批处理会询问用户是否要继续下一个任务,或返回到批处理的主菜单或...等等
现在,我想要做的是添加一个“交互式报警”命令,该命令会发出短促的蜂鸣声(例如:就像我们打开PC时的提示),提醒批处理用户有新问题。
我不知道这是否可能,但对我来说最重要的是,不要使用像WMP等GUI应用程序。我只想从后台这样做,即使该哔哔声必须从免费扬声器,或通过使用第三方CLI应用程序(顺便说一句,我已经Cygwin安装在我的Win7-x64).
请注意,我将在交互式问题之前添加报警命令,等待用户的回答进入下一阶段,因此我不能通过发出真实的的错误蜂鸣音来完成批处理!
有人能告诉我怎么做吗?
感谢您的帮助:)

vlurs2pr

vlurs2pr1#

    • 警告:rundll32.exe Kernel32.dll,Beep 750,300在现代Windows系统的命令行中不再正常工作,因为rundll32不再接受整数值(再次通过命令行),***这将使用过长的默认值播放蜂鸣音(频率令人恼火)*:
REM Again, with warnings about running this from the command line...
rundll32.exe Kernel32.dll,Beep 750,300

rundll32.exe cmdext.dll,MessageBeepStub

rundll32 user32.dll,MessageBeep

使用rundll函数,你不需要像^G这样的特殊符号。使用第一种方法,你也可以设置frequency and the time you want发出哔哔声,尽管可以看到警告,这些参数在现代系统的命令行中不再起作用,而是播放烦人的默认值。

    • 更新**

其他选择包括:

powershell "[console]::beep(500,300)"

或使用systemSounds.bat

call systemsounds.bat  beep

蜂鸣声的能力取决于主板以及主板是否有系统扬声器--随着系统倾向于只依赖"普通"扬声器,系统扬声器越来越少。另一种选择是通过这些扬声器播放声音。以下是一些选择:
使用SAPI.SpVoice的语音功能:

mshta "javascript:code(close((V=(v=new ActiveXObject('SAPI.SpVoice')).GetVoices()).count&&v.Speak('beep')))"

这里this被 Package 在一个批处理文件中,单词可以作为参数传递。
SAPI.SpVoice可用于播放wav文件,您在默认的Windows安装中打包了一些文件。您可以使用script

spplayer.bat  "C:\Windows\Media\Windows Navigation Start.wav"

另一种选择:Using the windows media player active-x objects来播放声音。在windows xp上它没有默认安装,但我认为对于较新的windows版本它是。它也可以播放mp3文件:

call mediarunner.bat "C:\Windows\Media\Ring03.wav"

还有一个比较模糊的例子--使用internet explorer的<bgsound>标签(它也可以播放mp3文件),script如下:

call soundplayer.bat "C:\Windows\Media\tada.wav"

这里有一种使用BEL字符生成声音的方法,代码易于复制粘贴(我称之为beeper.bat):

@echo off
setlocal
::Define a Linefeed variable
(set LF=^
%=-=%
)
  
for /f eol^=^%LF%%LF%^ delims^= %%A in (
   'forfiles /p "%~dp0." /m "%~nx0" /c "cmd /c echo(0x07"'
) do echo(%%A
iaqfqrcu

iaqfqrcu2#

不可能直接在(例如)记事本中键入BEL
要得到它,在命令行输入echo ^G>>yourbatch.bat(不要输入^G,而要输入<Control>-G,它在屏幕上显示为^G)。这会在文件的末尾放置一个看起来很奇怪的字符。这就是BEL字符0x 007(“control-G”)。只要将它复制/移动到任何echo命令中,你就可以了。还有

set /p "input=^Ggive value: "

(其中^G表示该奇怪字符)

ctzwtxfj

ctzwtxfj3#

可使用以下命令发出蜂鸣声

  • 不暂停脚本
  • 而不产生新的行。
  • 而不需要使用不可打印字符
Echo/| CHOICE /N 2> nul & rem BEL

这是对choice命令的故意误用,通过管道到Choice的Echo's nothing导致了一个非破坏性错误。STDERR被重定向到nul,默认的choice提示符通过/N开关被禁止,意味着没有新行输出。
如果出于某种原因,您希望在整个脚本中重复使用这种令人讨厌的音调,则可以将其定义为宏

Set "BEL=Echo/| CHOICE /N 2> nul"
%BEL%
omhiaaxx

omhiaaxx4#

@echo off
echo BEEP.BAT by CSS---
echo PRESS ANY KEY TO HEAR A BEEP...
PAUSE>NUL
ECHO 
echo I BEEPED
PAUSE

回显后有一个ASCII控制码^G。2复制这个代码,用文本编辑器保存为ASCII/ANSI格式。

jv2fixgn

jv2fixgn5#

使用ECHO命令回显CTRL G

nhhxz33t

nhhxz33t6#

我认为更好的解决方案是在cmd提示符下将^G回显到一个文件,然后在脚本中键入该文件,这样就不需要在批处理文件本身中包含控制字符:

C:\> echo ^G>beep.snd

现在在“beep.snd”文件中有一个ASCII 007字符,然后从你的.bat文件中,你所要做的就是键入它或复制到屏幕上:

type beep.snd

copy beep.snd con > nul
mnemlml8

mnemlml87#

我在Win 10中尝试了上面所有的选项,我用这个解决了

powershell.exe [console]::beep(500,600)

因此,在node.js中以编程方式显示如下(python或C类似)

require("child_process").exec("powershell.exe [console]::beep(500,600)");
monwx1rj

monwx1rj8#

有点晚的党,但我发现这个变化的@npocmaka版本为我与Windows 10:

REM This captures the Bell as a variable.
for /f %%g in ('%__APPDIR__%forfiles.exe /p "%~dp0." /m "%~nx0" /c "cmd /c echo 0x07"') do set "bel=%%g"
REM This produces the Bell sound.
set /P "=%bel%"<NUL
vhmi4jdf

vhmi4jdf9#

这对我有用。

stackoverflow在第4行省略了一个特殊字符,代码粘贴在这里:hashb.in/long
并且线5和6当然可以互换使用。

相关问题