【发布时间】:2014-12-25 19:03:32
【问题描述】:
我有一个批处理文件正在尝试运行以下内容:
FOR /F "tokens=1" %%G IN ('git show --pretty="format:" --name-only 54173344ab18a7d8e9ff2614cca62b671c8c7e2a') DO echo %%G
这会导致 git 错误“fatal: Invalid object name 'format'.”
但是,如果我只是将命令本身放在批处理文件中,我会得到预期的输出。
git show --pretty="format:" --name-only 54173344ab18a7d8e9ff2614cca62b671c8c7e2a
生产:
Files/MyFiles/header.html
Files/MyFiles/foo.html
问题与“格式:”周围的引号有关。
我尝试使用“”转义它们,但无济于事。我也试过^。我试过使用 usebackq 参数。
如果你去掉 --pretty="format:" 参数,这个循环也可以工作,但是我会插入一堆额外的文本。
【问题讨论】:
-
尝试使用
FOR /F "usebackq tokens=1...,然后在git命令周围使用反引号。反引号就像您当前拥有的单引号,但相反。 -
您需要对命令中的
=字符进行转义,例如--pretty^="format:"。否则我认为没关系。 -
为了看到这一点,我在调试器 (
cdb cmd /c test.cmd) 下运行了一个测试批次,并设置了一个断点 (bp kernel32!CreateProcessW) 来检查生成子进程的命令行(第二个 x64 参数:@987654330 @)。 -
我发现答案与@eryksun 解释的一样。引用等号 (=) 解决了这个问题。
标签: windows powershell batch-file