如何根据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"
别忘了,如果你想在同一个代码块/循环中使用变量,你需要 。
这是我的问题。
当你调用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"
别忘了,如果你想在同一个代码块/循环中使用变量,你需要