我想在批处理文件中使用git命令git show -s --format=%h
,想将结果存储在变量中。
这不起作用:
FOR /F %%i IN ('git show -s --format=%h') DO set commit=%%i
echo commit=%commit%
因为对于echo on
,它执行的命令是:
FOR /F %i IN ('git show -s --format') DO set commit=%i
输出为:
commit=
这种方法有效,但似乎很奇怪的解决方案:
set hhh="=%%h"
FOR /F %%i IN ('git show -s --format%hhh%') DO set commit=%%i
因为执行的命令是:
FOR /F %i IN ('git show -s --format"=%h"') DO set commit=%i
输出正确:
commit=6446e53
我想这与变量在带有百分号的批处理文件中的引用和使用方式有关
是否有一个更好的解决方案,可以正常执行:git show -s --format=%h
以下是如何在批处理文件中转义字符的列表:escape characters-作者Rob van der Woude
万一将来链接断开:
要转义的字符 | 转义序列 | 备注 | |
---|---|---|---|
% | |||
^ | ^ | 在双引号字符串中可能并不总是必需的,但这不会有什么影响 | |
& | ^& | ||
< | ^< | ||
> | ^> | ||
| | ^| | ||
' | ^' | 仅在FOR/F";主题";(即括号之间),除非使用backq | |
` | ^` | 仅在FOR/F";主题";(即括号之间),如果使用backq | |
, | ^, | 仅在FOR/F中需要;主题";(即括号之间),即使在双引号字符串中也是如此 | |
^ | |||
= | ^= | ||
( | ^( | ||
) | ^) | ||
^^ | 仅当延迟变量扩展处于活动状态时才需要 | ||
"> | "> | 仅在FIND的搜索模式中需要 | |
\\ | 仅在FINDTR | ||
[ | \[ | ||
] | >\] | ||
"> | \"> | ||
\ | |||
* | \* | ||
\ |