从批处理文件FOR循环运行SVN副本时出现问题

时间:2011-01-13 12:01:08

标签: svn dos command-prompt batch-file

我在.BAT文件中有一个循环,它执行以下操作,作为快速破解让我分支项目(输入检查等遗漏,这是运行的命令):

@for %%X in (%~3) do svn copy ^
 https://my.svn.account/%%X/trunk ^
 "https://my.svn.account/%%X/branches/%~1" ^
 -m "%~2"

所以你使用它:

  

branchTool test_branch“测试分支工具”“proj1,proj2”

SVN命令看起来正确:

>branchTool.bat test_branch "testing branch tool" "proj1,proj2"
svn copy  https://my.svn.account/proj1/trunk  "https://my.svn.account/proj1/branches/test_branch"  -m "testing branch tool"
svn copy  https://my.svn.account/proj2/trunk  "https://my.svn.account/proj2/branches/test_branch"  -m "testing branch tool"

然而,SVN实际上并没有运行 - .bat文件只是循环快速打印命令,没有任何反应。

如果我复制粘贴写入控制台的每一行的输出并单独运行它们,它们按预期工作

关于使用丑陋的DOS黑客脚本的评论,这是什么错误?即使有一个输入项目名称,例如运行:

,它也会失败
  

branchTool test_branch“测试分支   工具“proj1

2 个答案:

答案 0 :(得分:0)

我假设它与你使用插入符号有关。我一直避免使用它 - 但不记得原因......

我建议改用大括号。 E.g:

@for %%X in (%~3) do (
    svn copy https://my.svn.account/%%X/trunk "https://my.svn.account/%%X/branches/%~1" -m "%~2"
)

你也可以分开命令,以获得更好的可靠性/可维护性。我总是喜欢为指定的环境变量分配编号参数。然后,您可以将参数的意图显示给脚本的后续读者。 (我通常在startlocal / endlocal对中包装任何环境变量用法,以确保我不会用我的临时变量污染调用者环境。例如:

setlocal
for %%X in (%~3) do (
  set SRC=https://my.svn.account/%%X/trunk
  set DST=https://my.svn.account/%%X/branches/%~1
  svn copy "%SRC%" "%DST" -m "%~2"
)
endlocal

答案 1 :(得分:-1)

您可以尝试指定svn可执行文件的完全限定路径,例如C:\ path \ to \ Subversion \ svn.exe。执行批处理脚本时,可能是svn可执行文件不在环境路径上。