阻止批处理文件发出嘟嘟声

3

因某些原因,当在PAUSE事件中按下空格键时,我的批处理脚本会发出哔声。

我目前同时拥有以下两个命令:

start /wait %comspec% /Q /C "net stop beep" >nul 2>&1
start /wait %comspec% /Q /C "sc stop beep" >nul 2>&1

在我的脚本开头,我已经成功地禁用了系统蜂鸣声,但现在它被Windows的“主题”蜂鸣声所取代。

当我到达CHOICE事件并且用户按下空格键时也会发生这种情况。

有没有办法使批处理脚本完全静音,即使在输入“错误”时也是如此?

谢谢,D


将声音主题设置为“无声”? - marapet
我可以暂时从批处理文件中做到这一点吗?只是为了Windows蜂鸣声?该脚本用于跨多台机器自动化,并且希望用户不要完全禁用声音主题。 - Destroyer
2个回答

1

尝试将您的choice命令替换为类似于以下内容的内容。

set /p choice="Please enter a choice: "

这将需要用户按回车键,但至少不会发出哔哔声。

如果您真的想以困难的方式关闭默认声音,我认为您会在HKCU\AppEvents\Schemes\Apps\.Default\SystemAsterisk\.Current\(Default)HKCU\AppEvents\Schemes\Apps\.Default\AppGPFault\.Current\(Default)中找到它。

这是一个简短的概念验证。

@echo off
setlocal

:: stop bleeping service
start /wait %comspec% /Q /C "sc stop beep" >nul 2>&1

:: store current event setting for Asterisk
set loc=HKCU\AppEvents\Schemes\Apps\.Default\SystemAsterisk\.Current
for /f "tokens=3*" %%I in ('reg query %loc%') do (
    set asterisk=%%I %%J
)

:: choice with service stopped and Windows Asterisk sound event still active
choice

:: set Windows Asterisk event sound to ""
reg add "%loc%" /v "" /t REG_SZ /d "" /f >NUL

:: choice with asterisk set to ""
choice

:: restore the sound
reg add "%loc%" /v "" /t REG_SZ /d "%asterisk%" /f >NUL

如果这不起作用,请尝试将SystemAsterisk替换为AppGPFault。老实说,我无法重现您的症状。停止蜂鸣服务后,我听到了寂静。因此,我不确定用户按下空格键并停止蜂鸣服务时触发了哪个事件。

只是顺便提一下,使用“reg /f”比管道符“y”更容易。 - Bali C
感谢Bali C.,提供的好建议。我已经修改了代码以反映您的建议。 - rojo
很好的主意!我会试一试,结果证明哔哔声是由于时间问题引起的......脚本运行得太快了,并将之前暂停事件中的空格键按下带入了选择命令。添加一个简单的延迟(ping 1.1.1.1 -n 1 -w 100 > nul)绕过了这个问题。 - Destroyer

0

你可以录制一段静音的声音,然后用它来替换 Windows 主题提示音中的一个。

我建议你发布更多的代码,这样我们就可以看到是什么导致了这些提示音,因为 PAUSE 不应该产生这种情况。


选择 /N /C:APJ3CHQ /M " > 请选择适当的键进行选择 . . ."%1 - Destroyer
其实,我认为将Choice的输出导入到“nul”可能更好。但是如果我的记忆没有出错,这通常不起作用。 - James K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接