如何编写批处理文件来设置svn:ignore对于目录树的每个分支中的特定目录?

时间:2014-09-15 22:31:54

标签: windows batch-file cmd svnignore

用一个例子来解释,我的项目结构是RootDirectory,里面有3个分支目录DirA,DirB和DirC。

我们说目标文件夹是bin文件夹。 bin直接存在于dirC中,dirB中的1级以下(DirB-> Dir BA-> bin)和DirA中的两个级别(DirA-> DirAA-> DirAAA-> ; bin)中

现在我必须在根目录中运行一个批处理脚本,该脚本应横向整个树,搜索bin文件夹并将svn ignore仅放在bin文件夹中。

使用我当前的程序,我可以横向移动,但循环也在运行bin的子文件夹。因此,我无法在bin停留,请进入并实施svn:ignore

要点:

  1. 横向整个树的外环
  2. 内部循环停在bin,cd到bin,实现svn ignore,中断。
  3. 外循环继续到bin的下一个实例。

1 个答案:

答案 0 :(得分:0)

您可以递归调用批处理文件来实现此目的。

名为recursive.bat的示例批处理文件可能如下所示(注意:这只是为了让您入门,您可能需要做额外的事情来处理文件名和带有空格的目录以及可能的其他异常情况...):

@ECHO OFF 
SETLOCAL

IF "%1"=="" (
  SET BATDIR=%~dp0
) ELSE (
  SET BATDIR=%1
)

ECHO Currently in %CD%

REM Trick to get current directory name (not path)
FOR %%* IN (.) DO (
  IF %%~n*==bin (
    REM Currently inside a directory called bin
    ECHO Setting SVN prop for %CD% and exiting recursion...
    REM Insert your SVN ignore command here
    GOTO :EOF
  )
)

REM Loop over all subdirectories in this directory 
FOR /D %%D IN ("*") DO (
  ECHO Recursing into subdir "%%D"
  PUSHD "%%D"
  CALL "%BATDIR%\recursive.bat"
  POPD
)

将其调用为recursive.bat(无参数)。当前目录技巧是从Get current folder name by a DOS command?

复制的

顺便说一句,如果您碰巧使用TortoiseSVN,那么您可以通过配置设置指示它始终忽略bin个目录。