我在.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
答案 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可执行文件不在环境路径上。