-1

我有一个本地文件夹-A,它有许多子文件夹(svn-repository),这些子文件夹都有一个名为 .svn 的子文件夹。现在我想将所有 .svn 文件夹移动到文件夹-B,但是有一天我希望 .svn 文件夹回到原来的位置,这样我就可以 SVN 更新它们,所以“.svn”文件夹的父文件夹信息必须退出文件夹-B

像这样开始:

Folder-A
 |_DR1
   |_.svn
   |_s1
      |_.svn
      |_s1_s1folder
        |_.svn
        |_file1
      |_file1  
   |_s2
      |_.svn
      |_file1
      |_file2
 |_DR2 ... etc

所需的 MOVE 结果:

Folder-A only have actual sub-folders and data but without .svn folder

Folder-B
 |_DR1
   |_.svn
   |_s1
      |_s1_s1folder
        |_.svn
      |_.svn
   |_s2
      |_.svn
 |_DR2 ... etc

所需的恢复结果:

文件夹-A & 文件夹-B 回到我们开始的地方。

请帮助编写命令行来完成 MOVE 和 RESTORE 任务,谢谢

4

1 回答 1

1
@ECHO OFF
SETLOCAL
:: establish source and destination directorynames; ensure dest exists
SET source=c:\folder-a
SET dest=u:\folder-b
MD %dest% 2>NUL
:: delete a tempfile if it exists
DEL "%temp%\svntmp2.tmp" 2>nul
:: create a dummy directory
MD c:\dummy
:: go to root of tree containing SVN directories
PUSHD "%source%" 
XCOPY /L /s . c:\dummy |find /i "\svn\" >"%temp%\svntmp1.tmp"
POPD
:: goto destination directory
PUSHD "%dest%"
FOR /f "delims=" %%i IN ('type "%temp%\svntmp1.tmp"') DO CALL :moveit "%%i"
FOR /f "delims=" %%i IN (
 'TYPE "%temp%\svntmp2.tmp"^|sort /r'
 ) DO RD "%%i" /S /Q
POPD

:: delete tempfiles 
del "%temp%\svntmp1.tmp"
del "%temp%\svntmp2.tmp"

:: delete the dummy directory
RD /s /q c:\dummy

GOTO :eof

:moveit
:: get filename, remove quotes, then remove leading '.'
SET sourcefile=%~1
SET sourcefile=%sourcefile:~1%
FOR %%i IN ("%sourcefile%") DO (
MD ".%%~pi" 2>nul
MOVE "%source%%%~i" ".%%~pnxi"
>>"%temp%\svntmp2.tmp" ECHO %source%%%~pi
)

GOTO :eof
  • 设置源目录和目标目录。
  • 创建一个虚拟的空目录
  • 转到您的源并生成要移动的文件列表, XCOPY/L并过滤包含的行\svn\
  • 转到您的目标目录
  • 移动每个文件
    • 删除前导 '.' 从XCOPY输出
    • 创建目标子目录;忽略“它已经存在”错误
    • 移动文件
    • 在第二个临时文件中记录目录名称
  • 对第二个临时文件进行反向排序,将最深的子目录放在首位
  • 删除目录,忽略“它不存在”错误
  • 删除临时文件和虚拟目录。

注意,实际执行移动/目录创建/删除的命令只是ECHO编辑。这样您就可以验证例程是否按照您的要求执行。您需要验证它是否正确,然后从语句中删除 ECHO 关键字以实际激活移动。为了安全起见,首先对一个小的虚拟区域进行测试。

至于恢复 - 它相对容易。

xcopy /s/e/v "...folder-b\dr1\svn\" "\folder-a\dr1\svn\"

应该做你想做的,将恢复的项目文件保存在文件夹-b 中(如果你喜欢删除 - 这是你的系统),你可以逐个项目地恢复。

(我一直在使用SVN,因为现在这个点对我来说有点小了......)

于 2013-04-11T10:00:53.297 回答