![如何在批处理文件中对 git 命令进行子字符串处理?](https://linux22.com/image/1579155/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E4%B8%AD%E5%AF%B9%20git%20%E5%91%BD%E4%BB%A4%E8%BF%9B%E8%A1%8C%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%A4%84%E7%90%86%EF%BC%9F.png)
我正在尝试在 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
%%a
2
%%b
set
因此,对于您的命令,您需要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
干杯。