Batch file 在安全模式下启动Windows音频的批处理程序

Batch file 在安全模式下启动Windows音频的批处理程序,batch-file,windows-7,command-prompt,safe-mode,Batch File,Windows 7,Command Prompt,Safe Mode,代码如下: @echo off cls echo. echo Hello, %username%. echo This program will enable the sound service. echo. :case_1 call:print "Attempting to start Windows Audio..." call:check_audio "sc start AudioSrv" "case_2" :case_2 call:print "Attempting to star

代码如下:

@echo off

cls
echo.
echo Hello, %username%.
echo This program will enable the sound service.
echo.

:case_1
call:print "Attempting to start Windows Audio..."
call:check_audio "sc start AudioSrv" "case_2"

:case_2
call:print "Attempting to start Windows Audio again..."
call:check_audio "C:\Windows\System32\svchost.exe -k LocalServiceNetworkRestricted" "case_3"

:case_3
echo.
echo Attempting to start dependencies...
echo.
call:print "Starting Multimedia Class Scheduler..."
call:check_active "MMCSS" "sc start MMCSS" "case_4" "Multimedia Class Scheduler"
call:print "Starting Remote Procedure Call (RPC)..."
call:check_active "RpcSs" "sc start RpcSs" "case_4" "Remote Procedure Call (RPC)"
call:print "Starting Windows Audio Endpoint Builder..."
call:check_active "AudioEndpointBuilder" "sc start AudioEndpointBuilder" "case_4" "Windows Audio Endpoint Builder"

call:print "Attempting to start Windows Audio again..."
call:check_audio "sc start AudioSrv" "case_4"

:case_4
echo.
echo Attempting to start dependencies again...
echo.
call:print "Starting Multimedia Class Scheduler..."
call:check_active "MMCSS" "C:\Windows\system32\svchost.exe -k netsvcs" "error" "Multimedia Class Scheduler"
call:print "Starting Remote Procedure Call (RPC)..."
call:check_active "RpcSs" "C:\Windows\system32\svchost.exe -k rpcss" "error" "Remote Procedure Call (RPC)"
call:print "Starting Windows Audio Endpoint Builder..."
call:check_active "AudioEndpointBuilder" "C:\Windows\System32\svchost.exe -k LocalSystemNetworkRestricted" "error" "Windows Audio Endpoint Builder"

call:print "Attempting to start Windows Audio again..."
call:check_audio "C:\Windows\System32\svchost.exe -k LocalServiceNetworkRestricted" "error"

:print
echo %1
echo.

:check_audio
:: Checking if Windows Audio is active. If it is unable to be activated, GOTO <label>.
:: If it has already been activated, GOTO exit.
for /f "tokens=3 delims=: " %%H in ('sc query "AudioSrv" ^| findstr "        STATE"') do (
    :: Tokenises line containing service's state, pulls out third token.
    :: Tests resulting state against the string, "RUNNING".
    if /i "%%H" NEQ "RUNNING" (
        %1 || goto %2
    ) else (
        goto exit
    )
)

:check_active
:: Checking if service is active. If it is unable to be activated, GOTO <label>.
:: If it has already been activated, state that it is already running.
for /f "tokens=3 delims=: " %%H in ('sc query "%1" ^| findstr "        STATE"') do (
    if /i "%%H" NEQ "RUNNING" (
        %2 || goto %3
    ) else (
        echo %4 is already running.
    )
)

:error
:: States what error the program failed with and exits.
echo Program failed with error #%errorlevel%.
exit /b %errorlevel%

:exit
call:print "The program was successful. Windows Audio is running."
pause
exit
@echo关闭
cls
回声。
回显Hello,%username%。
echo此程序将启用声音服务。
回声。
:案例1
调用:打印“正在尝试启动Windows音频…”
呼叫:检查音频“sc启动音频SRV”“案例2”
:案例2
调用:打印“再次尝试启动Windows音频…”
调用:检查音频“C:\Windows\System32\svchost.exe-k LocalServiceNetworkRestricted”“案例3”
:案例3
回声。
echo正在尝试启动依赖项。。。
回声。
调用:打印“正在启动多媒体类调度程序…”
调用:选中活动的“MMCSS”“sc启动MMCSS”“案例4”“多媒体类调度程序”
调用:打印“正在启动远程过程调用(RPC)
调用:选中活动的“RpcSs”“sc启动RpcSs”“案例4”“远程过程调用(RPC)”
调用:打印“正在启动Windows音频端点生成器…”
调用:选中活动的“AudioEndpointBuilder”“sc启动AudioEndpointBuilder”“案例4”“Windows Audio Endpoint Builder”
调用:打印“再次尝试启动Windows音频…”
呼叫:检查音频“sc启动音频SRV”“案例4”
:案例4
回声。
echo正在尝试再次启动依赖项。。。
回声。
调用:打印“正在启动多媒体类调度程序…”
调用:检查\u活动的“MMCSS”C:\Windows\system32\svchost.exe-k netsvcs“error”“Multimedia Class Scheduler”
调用:打印“正在启动远程过程调用(RPC)
调用:检查\u活动的“RpcSs”C:\Windows\system32\svchost.exe-k RpcSs“error”远程过程调用(RPC)
调用:打印“正在启动Windows音频端点生成器…”
调用:检查\u活动的“AudioEndpointBuilder”C:\Windows\System32\svchost.exe-k LocalSystemNetworkRestricted“错误”“Windows Audio Endpoint Builder”
调用:打印“再次尝试启动Windows音频…”
调用:检查\u audio“C:\Windows\System32\svchost.exe-k LocalServiceNetworkRestricted”错误
:打印
回显%1
回声。
:检查音频
::检查Windows音频是否处于活动状态。如果无法激活,则转到。
::如果已激活,则转到“退出”。
对于/f“tokens=3 delims=:”%%H in('sc query“AudioSrv”^ findstr“STATE”)do(
::标记包含服务状态的行,取出第三个标记。
::针对字符串“RUNNING”测试结果状态。
如果/i“%%H”NEQ“正在运行”(
%1 | |转到%2
)否则(
转到出口
)
)
:检查是否激活
::检查服务是否处于活动状态。如果无法激活,则转到。
::如果它已被激活,请说明它已在运行。
对于/f“tokens=3 delims=:”%%H in('sc查询“%1”^ findstr“STATE”)do(
如果/i“%%H”NEQ“正在运行”(
%2 | |转到%3
)否则(
回显%4已在运行。
)
)
:错误
::说明程序失败并退出的错误。
回显程序失败,错误为#%errorlevel%。
退出/b%errorlevel%
:退出
call:print“程序成功。Windows音频正在运行。”
暂停
出口
有点意大利面味道,但能起作用。。。某种程度上。
当我在正常模式下运行它时,它只是在一个无限循环中运行,不断地调用标签“:exit”,直到我按CTRL-C键退出它。这是为什么?

您的电话正在断开,并且在呼叫链中上下移动

下面是一个非常简单的示例,它将演示这个问题(您需要使用Ctrl+C来打破无限循环(可能需要多次尝试!)-检查屏幕上的输出以查看发生了什么):

您将看到类似的输出(小摘录、运行开始和结束-为简洁起见在中间剪下大量重复):


您是否考虑将您的标签改名为“<代码>退出>代码>,如<代码>退出<代码>或<代码> do> <代码>,以查看是否可以解决该问题?(或者干脆完全删除最后的
退出
)使用有意义的批处理术语作为标签有点愚蠢?@KenWhite它仍然在生成一个无限循环:你好,Michael。此程序将启用声音服务。“正在尝试启动Windows音频…”系统找不到指定的驱动器。“程序成功。Windows Audio正在运行。”系统找不到指定的驱动器。“程序成功。Windows Audio正在运行。”系统找不到指定的驱动器。“程序成功。Windows Audio正在运行。”系统找不到指定的驱动器。“程序已成功。Windows Audio正在运行。”删除check_Audio for循环中的注释后,将删除“system cannot find”(系统无法找到)消息,但仍然是一个无限循环。
@echo off
:callit
call:print "Callit"

:print                              :: Start execution
echo %1
echo.                               :: Fall through to :error

:error                              
echo "In Error"                     :: Continue execution (fall through)

:exit
call:print "Loop from exit"         :: Loop back upward to :print and start again
pause
exit
"Callit"

"In Error"
"Loop from exit"

"In Error"
"Loop from exit"

"In Error"
"Loop from exit"

"In Error"
"Loop from exit"

"In Error"
"Loop from exit"

"In Error"
"Loop from exit"

"In Error"
"Loop from exit"

"In Error"
^CTerminate batch job (Y/N)?