我是新手在Windows中创建批处理文件,我正在尝试创建一个批处理文件来检查Windows状态下的服务,如果服务处于运行状态,那么我正在尝试执行另一个命令来检查状态但是我不能获取第二个命令的输出。
使用%ERRORLEVEL%
检查查询状态。
以下是我在批处理文件中的代码:
@echo off
sc query "MpsSvc" | find "RUNNING"
echo "%ERRORLEVEL%"
if "%ERRORLEVEL%" EQU "0" (
netsh advfirewall show currentprofile state | find "ON"
if "%ERRORLEVEL%" EQU "0" (
echo firewall is already enabled
)
if "%ERRORLEVEL%" NEQ "0" (
echo going to enable firewall
)
)
if "%ERRORLEVEL%" NEQ "0" (
echo firewall service is not running
)
pause
当我尝试运行我的批处理文件时,我获得了命令echo firewall is already enabled
的%ERRORLEVEL%只能获得另一个命令echo firewall is already enabled
。
有谁可以告诉我我做了什么错误?
答案 0 :(得分:2)
如另一个答案中所述,您的近似问题是嵌套%ERRORLEVEL%
中的早期变量扩展,但对于错误级别测试,不使用if not errorlevel 1 (...
,请使用< / p>
if errorlevel 5...
内置语法{{1}}测试错误等级 5或更高。
因此,如果errorlevel正好为0,则not errorlevel 1
为真。
答案 1 :(得分:1)
您需要启用(和使用)delayed expansion:
延迟扩展将导致变量在执行时扩展 时间而不是在解析时,这个选项打开了
之外,还使用SETLOCAL
命令。当延迟扩展有效时,变量可以是 除了正常!variable_name!
%variable_name%
引用
@ECHO OFF
SETLOCAL EnableExtensions EnableDelayedExpansion
sc query "MpsSvc" | find "RUNNING"
echo sc "%ERRORLEVEL%"
if "%ERRORLEVEL%" EQU "0" (
netsh advfirewall show currentprofile state | find "ON"
echo netsh "!ERRORLEVEL!"
if "!ERRORLEVEL!" EQU "0" (
echo firewall is already enabled
) else (
echo going to enable firewall
)
) else (
echo firewall service is not running
)
pause
资源(必读):
答案 2 :(得分:0)