windows - 如果语句未按预期执行 - 批处理文件
问题描述
我正在尝试在我们目前可以通过 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 窗口......
解决方案
如果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
推荐阅读
- java - 如何从活动中更改片段中视图的可见性
- css - 如何在 CSS 中制作部分透明的棋盘格?
- python-3.x - Python:尝试在函数内引用和使用我在脚本顶部声明的变量时出现未解析的引用(变量名)
- swift - 不使用 segue 将数据从 viewController 发送到 tableViewCell
- discord.js - 如何获取公会 Discord.js 中的成员列表
- c++ - 将 Xerces 库与 Geant4 链接时出现 CMake 错误
- php - Xdebug 已安装,但未显示在 phpinfo 上
- blogger - Ads.txt 未更新
- c# - 不应为已部署的应用程序启用开发环境。点网核心
- firebase - 如何在flutter中检查用户是否使用firebase for web App登录?