首页 > 解决方案 > 如果语句未按预期执行 - 批处理文件

问题描述

我正在尝试在我们目前可以通过 ConnectWise ScreenConnect 访问的大量客户端计算机上安装 RMM 代理。我编写了一个批处理 (cmd) 来简化下载和安装过程,同时进行静默安装。

但是,我遇到了让“if”听“for”字符串的问题。

我尝试在 之后更改符号do,我尝试更改==toEQU并切换括号等引号,但无济于事。


:check
for /f "tokens=1-3" %%i in ('cmd bitsadmin /list ^| findstr syncroMSP') do (
    if "%%k"=="SUSPENDED" (
        echo Status is [%%k]
        goto success
    ) else (
        goto fail
    )
)

:success
explorer
echo If you had a suspended transfer, your script worked.
pause
exit /b

:fail
calc
your If you didn't have any suspended transfers, your script worked.
pause
exit /b

由于没有活动的传输作业,我希望看到“else”命令运行,并最终看到计算器打开(让我看到它工作的简单方法)。相反,我看到“状态为 [%%k]”,然后是资源管理器打开。

编辑:今天早上运行完全相同的批处理后,我得到一个带有滴答光标块的空 cmd 窗口......

标签: windowsbatch-filefor-loopif-statement

解决方案


如果bitsadmin /list | findstr syncroMSP没有返回任何内容,for则根本不会执行循环,并且由于您的逻辑,下一个执行的代码是:success标签下方的代码。

跳过这一else部分并稍微改变你的逻辑:

:check
for /f "tokens=1-3" %%i in ('bitsadmin /list ^| findstr syncroMSP') do (
    if "%%k"=="SUSPENDED" (
        echo Status is [%%k]
        goto success
    )
)

calc
your If you didn't have any suspended transfers, your script worked.
pause
exit /b

:success
explorer
echo If you had a suspended transfer, your script worked.
pause
exit /b

甚至更好,完全改变你的逻辑:

:check
set status=unknown
for /f "tokens=1-3" %%i in ('bitsadmin /list ^| findstr syncroMSP') do set "status=%%k"
echo Status is [%status%]
if "%status%" == "SUSPENDED" (
  explorer
  echo your script worked
  pause
  exit /b
)
calc
echo no suspended transfer
pause
exit /b

推荐阅读