首页 > 解决方案 > 如果 set /a 失败,如何设置变量?

问题描述

我想检查我的 set /a 语句是否因Missing operator.错误而失败。我当前的批处理文件,只设置变量。这个批处理文件是为了测试我检查我的 set /a 语句是否因Missing operator.错误而失败的理论。

@echo off & @setlocal
set "rndtest=%random% %%2+1"
if "%rndtest%" == "1" set test=1()1
) else (
set test=1+1+1+1+1
)
set "test=1+1+1+1+1+1+1+1+1"
set /a "test_123_abc=%test%"
echo %test_123_abc%

我尝试了以下解决方案,但无济于事:

@echo off & @setlocal
set "rndtest=%random% %%2+1"
if "%rndtest%" == "1" set test=1()1
) else (
set test=1+1+1+1+1
)
set /a "test_123_abc=%test%" | find "Missing operator."
if %errorlevel% equ 0 echo Test failed!
) else (
echo Test didn't fail!
)
exit /b 0

这总是评估为Test didn't fail. 它应该评估为两个之一,但它总是评估为Test didn't fail.

标签: windowsbatch-filevariablesif-statement

解决方案


如果您使用该Set /A语句并收到一条Missing operator消息,通常会输出为 StdErr,因此可以使用条件运算符轻松确定,&&并且||

示例 1 (仅重定向 StdErr)

Set /A test_123_abc=1()1 2>NUL&&(Echo Test passed.)||Echo Test failed.

示例 2 (重定向 StdErr 和 StdOut)

Set /A test_123_abc=1()1 >NUL 2>&1&&(Echo Test passed.)||Echo Test failed.

我已将 StdErr 重定向到 NUL 设备,以防止返回任何错误消息,并使用条件&&来表示前一个指令的成功返回和前一个指令||的不成功返回。


推荐阅读