如何将调用GIT的输出转换为批处理脚本中的变量?

时间:2016-05-03 12:21:50

标签: windows git batch-file

我有一个git命令来获取当前仓库的最新SHA,如下所示:

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

所以推测引号有问题吗?

1 个答案:

答案 0 :(得分:2)

我没有便于测试的Windows系统,但我认为这些方面的内容如下:

^

请注意,“%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% 转义双引号。我认为这应该有效:

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

但实际上,如果你想在Windows中进行shell编程,只需使用Powershell然后就可以了:

<Shortcut>
 <Company>99999</Company>
  <Plant>MfgSys</Plant>
  <AppServerURL>net.tcp://server.whatever.fakeserver</AppServerURL>
  <DateTime>4/28/2016 1:05:24 PM</DateTime>
  <Originator>Admin</Originator>
  <Process>
   <ProcessID>SRGO1020</ProcessID>
  <Description></Description>
  </Process>
  <RecordIDS KeyFields="SysRowID" KeyFieldsType="System.Guid" TableName="OrderHedList" DataSourceType="OrderHedListDataSet">
   <RecordID>a0b7006e-adc5-4e8a-a011-97f6d9602602</RecordID>
  </RecordIDS>
</Shortcut>