代码之家  ›  专栏  ›  技术社区  ›  Ali EXE

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

  •  0
  • Ali EXE  · 技术社区  · 2 年前

    这是我的问题。

    当你打电话的时候 git status --porcelain 无论命令的输出是什么,git都返回0。

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

    我需要能够存储 git状态——瓷 在一个变量中,然后根据它中任何字符的存在来认识是否有变化。

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

    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%
    

    没用。

    我该怎么做?

    请注意:

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

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

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

    0 回复  |  直到 2 年前
        1
  •  3
  •   Stephan    2 年前

    你的 for 循环将输出的每一行依次分配给变量,因此在最后,变量包含输出的最后一行。如果这恰好是一个空行,那么变量也将是空的。但你不需要 对于 本例中为循环。只需过滤命令的输出并根据结果设置变量(至少找到一个字符/未找到字符):

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

    别忘了,你需要 delayed expansion 如果要在同一代码块/循环中使用该变量。