我有一个本地Folder-A,它有许多子文件夹(svn-repository),这些子文件夹都有一个名为.svn的子文件夹。现在我想将所有.svn文件夹移动到Folder-B,但是如果我想将.svn文件夹恢复到原来的位置,那么我可以SVN更新它们,所以“.svn”文件夹的父文件夹信息必须退出夹-B
就像这样开始:
Folder-A
|_DR1
|_.svn
|_s1
|_.svn
|_s1_s1folder
|_.svn
|_file1
|_file1
|_s2
|_.svn
|_file1
|_file2
|_DR2 ... etc
所需的移动结果:
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
所需的RESTORE结果:
Folder-A&文件夹-B回到我们开始的地方。
请帮助编写命令行来完成MOVE和RESTORE任务,谢谢
答案 0 :(得分: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
输出请注意,实际 DO 移动/目录创建/删除的命令仅为ECHO
。这样您就可以验证例程是否符合您的要求。您需要验证它是否正确,然后从语句中删除ECHO关键字以实际激活移动。出于安全考虑,首先对小虚拟区域进行测试。
至于恢复 - 它相对容易。
xcopy /s/e/v "...folder-b\dr1\svn\" "\folder-a\dr1\svn\"
应该做你想做的事情,将恢复的项目文件保存在文件夹-b中(如果你愿意,删除它 - 这是你的系统),你可以逐个项目地恢复。
(我一直使用SVN
,因为现在这个点对我来说有点小......)