批次:在报价执行命令for循环与管道找到(Batch: Execute command with q

2019-09-20 14:47发布

能否请你建议如何修正以下命令,该命令将删除SVN受控的项

rem @echo off
for /f "tokens=2*" %%i in ('"c:\Program Files\TortoiseSVN\bin\svn.exe" status --no-ignore ^| find "?"') do echo %%i

下面变种不带路径的工作原理:

rem @echo off
for /f "tokens=2*" %%i in ('svn.exe status --no-ignore ^| find "?"') do echo %%i

但我需要通过整个路径与svn.exe。 在这种情况下,输出C:\程序是不是一个有效的程序

Answer 1:

试试这个:

   for /f "usebackq tokens=2*" %%i in (`"c:\Program Files\TortoiseSVN\bin\svn.exe" status --no-ignore ^| find "?"`) do echo %%i


Answer 2:

当我跑了这个问题,我尝试使用“有usebackq”为在Windows命令参考[1]提出:

指定执行后引号的字符串作为命令,和单引号的字符串作为文字字符串命令。 此外,允许设置文件名用引号括起来。

我发现,这仍然给了一个错误约C:\程序不被执行。

然后我记得,那Windows CMD.EXE的有很奇怪的引用规则,其中,如果在执行字符串的第一个和最后一个字符是报价,他们将[2]剥离。

所以,我想这一点,和它的工作对我来说:

for /F usebackq %%d in (`""path to command" arg arg "quoted arg""`) do @echo %%d

[1] http://technet.microsoft.com/en-us/library/cc754900.aspx

[2] http://technet.microsoft.com/en-us/library/cc771320.aspx



文章来源: Batch: Execute command with quotes in for loop with piping to find