4

您能否建议如何修复以下命令,该命令会从 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:\Program is not a valid program

4

3 回答 3

5

试试这个:

   for /f "usebackq tokens=2*" %%i in (`"c:\Program Files\TortoiseSVN\bin\svn.exe" status --no-ignore ^| find "?"`) do echo %%i
于 2012-08-01T08:23:53.023 回答
1

当我遇到这个问题时,我尝试按照 Windows 命令参考 [1] 中的建议使用“usebackq”:

指定将反引号字符串作为命令执行,将单引号字符串作为文字字符串命令执行。此外,允许将 Set 中的文件名用引号引起来。

我发现这仍然给出了关于 C:\Program 不可执行的错误。

然后我记得,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

于 2014-08-01T16:35:44.710 回答
0

离开上面 Ben 的回答(https://stackoverflow.com/a/25084830/2630028),下面的例子对我有用:

for /f "usebackq delims=" %%j in (`^""C:\Perl64\bin\perl" -e "print(qq(foo))"^"`) do (
    echo LINE: %%j 
)

看来我必须用^https://ss64.com/nt/syntax-esc.html)转义外部引号。

于 2019-11-19T00:18:23.587 回答