需要批处理文件变量来存储运行命令的结果(转义问题?)

时间:2018-03-02 16:53:45

标签: batch-file cmd

我认为这是一个逃避问题,但我不确定,因为我已经尝试了所有可以想到的逃避组合,而且没有一个能够发挥作用。

此Git命令返回我需要存储在批处理文件变量中的提交哈希...

git show --grep="MySearchString" --pretty=format:"%H" --no-patch

此批处理文件命令有效...

for /f "delims=" %%a in ('git show --grep="MySearchString" --no-patch') do @set foobar=%%a
echo %foobar%

但是当我在--pretty=format:"%H"部分添加批处理文件失败时......

for /f "delims=" %%a in ('git show --grep="MySearchString" --pretty=format:"%H" --no-patch') do @set foobar=%%a
echo %foobar%

我尝试使用\和^转义--pretty=format:"%H"部分但无法运行它。我哪里错了?谢谢!

2 个答案:

答案 0 :(得分:1)

将百分号(它是批处理中的特殊字符,将其评估为单个百分号)加倍,并使用插入符^转义等于:

for /f "delims=" %%a in ('git show --grep^="MySearchString" --pretty^=format:"%%H" --no-patch') do @set foobar=%%a
echo %foobar%

或没有%H周围的引号也适用:

for /f "delims=" %%a in ('git show --grep^="MySearchString" --pretty^=format:%%H --no-patch') do @set foobar=%%a
echo %foobar%

命令被送到' for'需要复杂而繁琐的逃避;我发现将结果导向文件然后解析文件是一种更直接的策略。

答案 1 :(得分:-1)

你是否在没有引号的情况下尝试过它?

... --pretty-format:%H?