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

问题描述 投票:0回答:2

我认为这是一个逃避问题,但我不确定,因为我已经尝试了我能想到的所有逃避组合,但没有一个能够奏效。

这个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"部分,但无法让它运行。我哪里错了?谢谢!

batch-file cmd
2个回答
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
投票

你没有报价就尝试过吗?

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

© www.soinside.com 2019 - 2024. All rights reserved.