CMD提示:%ERRORLEVEL%从第二次运行开始获取正确的输出值

CMD提示:%ERRORLEVEL%从第二次运行开始获取正确的输出值

我的 Windows 10 PC 上安装了 wolframscript。

在命令提示符下运行以下命令

> where /q wolframscript & echo %ERRORLEVEL%
9009    <<< why didn't I get 0?

> where /q wolframscriptss & echo %ERRORLEVEL%
0       <<< why didn't I get 1?

> where /q wolframscriptss & echo %ERRORLEVEL%
1

> where /q wolframscriptss & echo %ERRORLEVEL%
1

> where /q wolframscript & echo %ERRORLEVEL%
1       <<< why didn't I get 0?

> where /q wolframscript & echo %ERRORLEVEL%
0

考虑到我对输出的评论,我想了解为什么我得到的输出与我预期的不同。

我的最终目标是拥有一个批处理脚本来检查我的电脑上软件程序的安装。

答案1

当 CMD 读取命令行或命令块时,它会立即扩展它找到的任何变量。例如,如果你执行

where /q wolframscript & echo %ERRORLEVEL%

ERRORLEVEL当9009 (来自某些先前的活动)时,CMD 立即将其转换为

where /q wolframscript & echo 9009

然后执行。你可以很容易地演示这一点:

C:\> set "VAR=red"

C:\> set "VAR=blue" & echo %VAR%
red

微软的读取命令时发生环境变量扩展文档中给出了更复杂的例子:

set VAR=before
if "%VAR%" == "before" (
    set VAR=after
    if "%VAR%" == "after" @echo If you see this, it worked
)

其中不会显示消息,因为第二条if语句被扩展为

    if "before" == "after" @echo ...

我不确定你到底想要什么,但这里的简单解决方法就是将命令放在不同的行上:

C:\> where /q wolframscript
C:\> echo %ERRORLEVEL%

相关内容