如何在批处理脚本中将调用GIT的输出存储到变量中?

4
我有一个获取当前仓库最新 SHA 的 git 命令,如下所示:
git log --pretty=format:"%H" -n 1

我有一个Windows批处理脚本,我想按照以下方式使用它:

SET CURRENT_SHA=???

但是我不知道如何将来自git的输出放入变量中,以便我可以利用它。

编辑

我已经尝试了以下方法(这似乎是我在这里和其他地方读到的一般建议):

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "tokens=* USEBACKQ" %%i IN (`git log --pretty=format:"%H" -n 1`) DO (SET CURRENT_SHA=%%i)
ECHO Current Sha: %CURRENT_SHA%

但是我得到:

fatal: failed to stat 'format:i) ECHO Current Sha: 48bce83e800b96607afb2a387c4fcd7b0b0f037e

因此,推测引号存在问题吗?

2
我认为你需要将百分号加倍以便转义%H,然后再次加倍因为它在批处理文件中。 - Duncan
那就是转义=的方法。 - Jon Cage
1个回答

7

我手头没有Windows系统来测试,但我认为以下内容可能有帮助:

FOR /F %i IN (`git log --pretty=format:"%%H" -n 1`) DO SET CURRENT_SHA=%i

请注意,"%H"需要进行转义,但是如果您要在批处理文件中使用此行,您还需要对所有内容进行双重转义。您可能还需要使用^转义双引号。我认为以下代码应该可以工作:
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=* USEBACKQ" %%a in (`git log --pretty^=format:"%%H" -n 1`) do (SET CURRENT_SHA=%%a)
ECHO Current Sha: %CURRENT_SHA%

但是,如果你想在Windows中进行shell编程,只需使用PowerShell,然后你就可以执行以下操作:

$CURRENT_SHA=git log --pretty=format:"%H" -n 1

2
您先生,真是个传奇。我终于用 git log --pretty^=format:"%%H" -n 1 搞定了,原来问题出在等号和缺少一个额外的 % 上。 - Jon Cage

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接