@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
出力から
- 宛先サブディレクトリを作成します。「既に存在します」エラーを無視する
- ファイルを移動する
- ディレクトリ名を 2 番目の一時ファイルに記録します
- 2 番目の一時ファイルを逆順に並べ替えます。これにより、最も深いサブディレクトリが最初に配置されます。
- 「そこにありません」エラーを無視して、ディレクトリを削除します
- 一時ファイルとダミー ディレクトリを削除します。
実際に移動/ディレクトリの作成/削除を行うコマンドは単にedであることに注意してください。ECHO
これは、ルーチンが実行したいことを実行することを確認できるようにするためです。それが正しいことを確認してから、ステートメントから ECHO キーワードを削除して、実際に移動をアクティブにする必要があります。安全のために、最初に小さなダミー領域に対してテストします。
復元に関しては、比較的簡単です。
xcopy /s/e/v "...folder-b\dr1\svn\" "\folder-a\dr1\svn\"
復元されたプロジェクト ファイルをフォルダー b に保持し (必要に応じて削除します。これはシステムです)、プロジェクトごとに復元できます。
(SVN
最近ドットが少し小さくなってきているのでずっと使っています...)