-1

多くのサブフォルダー (svn-repository) を持つローカルのフォルダー A があり、これらのサブフォルダーには両方とも .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

望ましい 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

望ましい復元結果:

Folder-A と Folder-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出力から
    • 宛先サブディレクトリを作成します。「既に存在します」エラーを無視する
    • ファイルを移動する
    • ディレクトリ名を 2 番目の一時ファイルに記録します
  • 2 番目の一時ファイルを逆順に並べ替えます。これにより、最も深いサブディレクトリが最初に配置されます。
  • 「そこにありません」エラーを無視して、ディレクトリを削除します
  • 一時ファイルとダミー ディレクトリを削除します。

実際に移動/ディレクトリの作成/削除を行うコマンドは単にedであることに注意してください。ECHOこれは、ルーチンが実行したいことを実行することを確認できるようにするためです。それが正しいことを確認してから、ステートメントから ECHO キーワードを削除して、実際に移動をアクティブにする必要があります。安全のために、最初に小さなダミー領域に対してテストします。

復元に関しては、比較的簡単です。

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

復元されたプロジェクト ファイルをフォルダー b に保持し (必要に応じて削除します。これはシステムです)、プロジェクトごとに復元できます。

SVN最近ドットが少し小さくなってきているのでずっと使っています...)

于 2013-04-11T10:00:53.297 に答える