您能否告知如何修复下面的命令,从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不是有效的程序
答案 0 :(得分:4)
试试这个:
for /f "usebackq tokens=2*" %%i in (`"c:\Program Files\TortoiseSVN\bin\svn.exe" status --no-ignore ^| find "?"`) do echo %%i
答案 1 :(得分:0)
当我遇到这个问题时,我尝试使用" usebackq"正如Windows命令参考[1]中建议的那样:
指定将反引号字符串作为命令执行,将单引号字符串作为文字字符串命令执行。另外,允许将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
答案 2 :(得分: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)来转义外部引号。