如何根据bat命令的输出设置变量?

How to set a variable based on the output of a command in bat?

这是我的问题。

当你调用git status --porcelain git returns 0 不管命令的输出是什么。

所以 %ERRROREVEL% 在这里对我没有帮助。

我需要能够将git status --porcelain的输出存储在一个变量中,然后根据其中是否存在任何字符来判断是否有变化。

所以基本上我需要这个伪代码:

set GitStatusOutput = git status --porcelain
set HasChanges = findstr . in %GitStatusOutput%

但我在 运行 CMD 中的这个简单需求上遇到了困难。我无法更改为 bash 或 PowerShell。

我试过:

    for /f "tokens=*" %%a in ('git -C %%s status --porcelain') do (set GitStatusResult=%%a)
    echo %GitStatusResult%

不工作。

我试过:

    set HasChangesCommand=git -C %%s status --porcelain | findstr . && echo 1 || echo 0
    echo %HasChangesCommand%

不工作。

我该怎么做?

请注意:

我问了很多问题,但都没有成功。

我有一个非常非常简单的需求,我被困了好几个小时。

感谢您抽出宝贵时间,但我不需要花哨的解释。我只需要一个简单的答案。

您的 for 循环将输出的每一行分配给变量,一个接一个,因此最后变量包含输出的最后一行。如果那恰好是空行,则变量也将为空。但是在这种情况下您不需要 for 循环。只需过滤命令的输出并根据结果设置变量(至少找到一个字符/未找到一个字符):

git -C %%s status --porcelain | findstr . >nul && set "HasChangesCommand=1" || set "HasChangesCommand=0"

别忘了,如果你想在同一个代码块/循环中使用变量,你需要