gpt4 book ai didi

windows - 从批处理脚本启动 Windows 服务并根据结果采取适当的操作

转载 作者:可可西里 更新时间:2023-11-01 11:47:43 25 4
gpt4 key购买 nike

我有一个 .bat 脚本试图在最后启动 Windows 服务。

:start_wildfly
echo.
set /p wildfly_service_name="Enter Wildfly service name: "
echo INFO: Starting %wildfly_service_name%...
echo.
call net start "%wildfly_service_name%"

我希望能够解释 net start 的结果尝试让我的脚本在失败时采取适当的操作(例如,如果服务已经在运行,请重新启动它。如果服务名称无效,如果用户没有足够的名称,请再次提示输入名称特权,退出)。

问题是 NET 命令不返回记录的 Win32_Service class codes .

它确实会在控制台上显示错误,但是:

The requested service has already been started.

More help is available by typing NET HELPMSG 2182.

参见 http://ss64.com/nt/net_service.html获取错误列表。

不幸的是,errorlevel变量总是 2在这些错误情况下,所以我不能依赖它。

我现在要做的是运行 FIND关于 NET 的输出命令,搜索特定的错误代码并根据它们采取行动。

net start Wildfly 2>&1 | FIND "2182"
if %errorlevel% equ 0 goto service_already_running

因此,FIND 的结果存储在 errorlevel我可以检查一下 FIND 是否通过检查是否成功 errorlevel是 0。这行得通。

现在,当我想检查多个错误代码时,问题就来了。例如,我不知道如何扩展上面的代码来检查“2185”,并在这种情况下转到不同的标签。

我现在正尝试存储 NET 的全部结果命令到变量中,然后运行 ​​FINDSTR在那个变量上。

setlocal EnableDelayedExpansion
set "output_cnt=0"
for /F "delims=" %%f in ('dir /b') do (
set /a output_cnt+=1
set "output[!output_cnt!]=%%f"
)
for /L %%n in (1 1 !output_cnt!) DO echo !output[%%n]!

这应该存储并回显输出的每一行,但是最后一行似乎没有做任何事情。

然后我还发现了一些应该在变量中搜索并返回是否找到该字符串的代码:

echo.%output%|findstr /C:"2182" >nul 2>&1 && echo Found || echo Not found.

虽然我没有运气把它们放在一起。我只想能够解释 NET START <SERVICE> 的结果并根据结果跳转到某些标签。

最佳答案

我希望能够解释 net start 尝试的结果

so that I can have my script take the appropriate action if it fails (e.g. if the service is already running, restart it. If the service name is invalid, re-prompt for the name again, if the user doesn't have sufficient privileges, exit).

像您已经在做的那样启动服务:

net start "%wildfly_service_name%"

现在检查服务的状态。

有两种方法可以做到这一点。

  1. 再次使用net start查看服务是否正在运行:

    net start | find "%wildfly_service_name%" > nul
    if errorlevel 1 echo The service is not running
  2. 使用sc(服务控制)检查服务状态:

    SC query %wildfly_service_name% | find "STATE" | find "STOPPED"

    或者

    sc query %wildfly_service_name% | find "STATE" | find "RUNNING"

    如果找到文本,以上两个语句将返回 %errorlevel% = 1


进一步阅读

关于windows - 从批处理脚本启动 Windows 服务并根据结果采取适当的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40187380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com