不使用"查找"命令检查服务是否正在运行

dus*_*ntp 2 windows cmd batch-file

在批处理文件中,我正在尝试检查服务是否已启动,如果没有,则等待.

现在检查服务是否正在运行,我这样做:

sc query "serviceName" | find /i "RUNNING"
if "%ERRORLEVEL%"=="0" (
    echo serviceName is running.
) else (
    echo serviceName is not running
)
Run Code Online (Sandbox Code Playgroud)

麻烦是错误级别始终设置为0.可能是因为这个已知的查找错误.有没有其他方法可以检查服务是否已启动,如果没有则等待?

Ele*_*ios 10

您可以使用Findstr而不是Find命令:

sc query "Service name" | findstr /i "RUNNING" 1>nul 2>&1 && (
    echo serviceName is running.
) || (
    echo serviceName is not running
)
Run Code Online (Sandbox Code Playgroud)

您也可以使用wmic命令执行此操作:

wmic service where name="Service name" get State | Findstr /I "Running" 1>NUL 2>&1 && (
    echo serviceName is running.
) || (
    echo serviceName is not running
)
Run Code Online (Sandbox Code Playgroud)

另一件需要注意的事情是,在比较数值时,不应该用引号括起表达式"",因此条件应如下所示:

If %ERRORLEVEL% EQU 0 () ELSE ()
Run Code Online (Sandbox Code Playgroud)


fox*_*ive 8

如果您不使用Windows NT version 3.1 and Windows NT Advanced Server version 3.1并且您的服务名称不包含,您的代码将正常工作running.

也许它在一个循环中,所以你应该使用这个(或延迟扩展):

sc query "serviceName" | find /i "RUNNING"
if not ERRORLEVEL 1 (
    echo serviceName is running.
) else (
    echo serviceName is not running
)
Run Code Online (Sandbox Code Playgroud)