这是代码:
@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
有点像意大利面,但确实可以……有点。当我在正常模式下运行它时,它只是进入一个无限循环,不断调用标签 ":exit" 直到我 CTRL-C 退出它。为什么是这样?