需要扩展批处理功能,以便从SVN签出多个文件



我有一个批处理脚本,当输入时从SVN检出任何项目。我必须扩展该功能,以便用户决定可以签出多个文件,并提供一种简单的方法。现在,我的脚本列出了来自SVN的文件,让用户选择输入任何名称,并使用非常基本的导航方法检出每个项目的主干。代码如下所示:

回声 ============================================================
这个批处理文件将自动从eclipse签出项目回声 ============================================================ % 问%

set svnroot= svn://some_dir
set svnroot_temp= %svnroot%
svn ls !svnroot_temp!
:top
set /p direct=Enter directory..press 1 at anytime to return to root directory and type checkout at anytime to checkout the project :
if /i !direct!==checkout ( cls
set   loc=!svnroot_temp!
set   proj=!dir!
if /i !direct!==1  (cls
set svnroot_temp=%svnroot%
svn ls !svnroot_temp!
goto :top
)
set svnroot_temp= !svnroot_temp!/!direct!
svn ls !svnroot_temp!
set dir=!direct!
goto :top
)

if exist "%javawork%/%proj%/" ( echo  %NL%project already  exists... 
PING 1.1.1.1 -n 1 -w 3000 >NUL
echo %NL%updating the folder%NL%  
svn update %javawork%/%proj%/* 
goto :correct
)  
set CheckOutLocation= user_preferred_location
svn checkout %loc%/trunk  %CheckOutLocation%/%proj%/trunk/
echo %NL%%NL% Copying was successful! %NL%
PING 1.1.1.1 -n 1 -w 2000 >NUL

我想知道是否有一个更简单的方法,以便更多的项目可以从SVN签出。比如为svn ls列表设置编号,然后为要签出的项目选择编号。或者任何一种使检查许多项目更方便的方法。任何帮助都将不胜感激。谢谢!

通过管道将svn ls添加到findstr /n中,然后输入以空格分隔的项目编号序列以进行结对:

svn ls !svnroot_temp! | findstr /n .
set /p checkout=Enter space-delimited numbers of projects to checkout
set projNo=0
for /f "tokens=*" %%a in ('svn ls !svnroot_temp!') do (
    set /a projNo+=1
    for %%b in (!checkout!) do if %%b==!projNo! (
        svn checkout %%a/trunk %CheckOutLocation%/%%a/trunk/
    )
)

最新更新