如何在批处理文件中对 git 命令进行子字符串处理?

如何在批处理文件中对 git 命令进行子字符串处理?

我正在尝试在 TurtoiseGit 中添加预提交钩子,以自动将 JIRA 编号添加到我的提交消息中。JIRA 编号始终是我的分支名称的第一部分。

例如:JIRA-456-fix-cleanup-crash我想JIRA-456

我使用的 git 命令是git rev-parse --abbrev-ref HEAD > %2。但不幸的是,这给了我整个分支名称。我只需要JIRA-456

我尝试使用 shell 命令findstr来对分支名称进行子串化,但没有成功。

我使用的机制如下所列: https://gitlab.com/tortoisegit/tortoisegit/issues/2229#note_1781864

答案1

而不是重定向输出

git rev-parse --abbrev-ref HEAD

直接进入文件> %2,用对于/f

@Echo off
for /f "tokens=1-2 delims=-" %%A in ('
    git rev-parse --abbrev-ref HEAD
') Do Set "Var=%%A-%%B"
(Echo:%Var%)>%2

答案2

只有当字符串的结构像您所说的那样时,这才会起作用AAAA-BBBB-CCCC-...

for /F "tokens=1,2 delims=-" %%a in ("JIRA-456-fix-cleanup-crash") do (set "expectedString=%%a-%%b")
echo %expectedString%

产量,它通过使用作为分隔符来JIRA-456分割字符串来工作,然后它采用()和()并使用将它们连接起来,因此您可以在批处理文件中进一步使用该字符串。-tokens 1%%a2%%bset

因此,对于您的命令,您需要FOR使用单引号将命令传递给函数在其自己的上下文中'

:: I Haven't used git so I'm not really sure about why you redirected the output stream
:: but this should give you a good idea how to use it

for /F "tokens=1,2 delims=-" %%a in ('git rev-parse --abbrev-ref HEAD') do (set "ExString=%%a-%%b")

%%a如果您想将其作为命令进行测试,则该语法适用于批处理文件%a

干杯。

相关内容