web-dev-qa-db-ja.com

Robocopy、既存のファイルを上書きしないで、変更された/新しいファイルをコピーします

New/changed/deletedファイルで宛先ディレクトリのファイルを上書きせずに2つのディレクトリをミラーリングすることは可能ですか?スナップショットのようなもの。

例:すべてのファイルとサブディレクトリを含むソースディレクトリを宛先ディレクトリにコピーしますが、たとえば宛先ディレクトリにファイルA.xlsが含まれ、A.xlsがソースディレクトリで変更されている場合は、A.xlsをコピーしますが、以前のAは保持します宛先ディレクトリも同様です。以前のファイルを保存するには、日付スタンプまたはカウンターをファイル名に追加できます。

コピー後の例:
SomeDirectory
| --A.xls
| --A_20120701.xls
| --A_20120920.xls

ありがとうございました。

5
I don't know.

いいえ、Robocopyを使用してこれを行うことはできません。 Robocopyを使用してフォルダーパスをミラーリングすると、ソースに存在しなくなったファイルが宛先に削除されます。古いバージョンでファイルを上書きしないようにすることができますが、コピープロセス中に古いバージョンを保持したり、名前を変更したりすることはできません。

変更されたファイルをコピーするコマンドスクリプト/バッチファイルを作成しましたが、スクリプトが実行された日付に基づいてツリー構造を作成しました

例えば1つの特定のファイルのツリーは次のようになります。

c:\_archive\201209\
                    23\
                        0930
                             Todays notes.txt
                        1145
                             Todays notes.txt
                    24\
                        1000
                             Todays notes.txt

役立つと思われる場合は、そのスクリプトのサンプルを投稿できます。

多くの需要があるため、以下の基本的なバックアップスクリプトを見つけてください。

@echo off
cls
rem parse the output of the date /t command to create a date in the format yyyymmdd, and also remove the delimiter (/)
rem  store the results in environment variables
for /F "tokens=1,2,3,4 delims=/ " %%i IN ('date /t') do SET Z_DATE=%%k%%j%%i 
for /F "tokens=1,2,3,4 delims=/ " %%i IN ('date /t') do SET Z_YEAR=%%k
for /F "tokens=1,2,3,4 delims=/ " %%i IN ('date /t') do SET Z_MONTH=%%j
for /F "tokens=1,2,3,4 delims=/ " %%i IN ('date /t') do SET Z_DAY=%%i

echo date %Z_DATE%
echo year %Z_YEAR%
echo month %Z_MONTH%
echo day %Z_DAY%

rem parse the output of the time /t command to remove the delimeter (:)
rem  store the result in an environment variable
for /f "tokens=1,2 delims=:. " %%i IN ('time /t') do SET Z_TIME=%%i%%j

echo time %Z_TIME%
rem change the colour to a Nice deep green on black.
color 02
::-------------------------

@echo on
xcopy "c:\MyFiles\*.*" "C:\MyArchive\ByDate\%Z_YEAR%%Z_MONTH%\%Z_DAY%\%Z_TIME%%~p1%~n1\" /ksymhr
@if @@ERRORLEVEL==1 SET Z_BACKUP_ERROR_FLAG=1

Goto End

::---------------------------------------------------------------------------
:NotifyUser
echo.
echo An error occurred during the backup.
echo.
pause

::---------------------------------------------------------------------------
:End

echo %Z_DATE%
echo %Z_TIME%
time /t

rem Clear out the environment variables
SET Z_DATE=
SET Z_TIME=
SET Z_BACKUP_ERROR_FLAG=

このスクリプトについて質問がある場合(私はメインのバックアップスクリプトからすばやくスクリプトを作成しましたが、十分にテストしていませんでした)、「Server Fault Backup Script query」という件名のメールを私のGmailアカウントに送信してください。質問せずに私のGmailアドレスを解決できる場合は、喜んでお手伝いします。

5
cometbill

日付、年、月、日を解析する行が機能しませんでした。ただし、これらは機能し、残りのスクリプトは完全に機能します。

Set Z_Date=%date:~10,4%%date:~4,2%%date:~7,2%
Set Z_Year=%date:~10,4%
Set Z_Month=%date:~4,2%
Set Z_Day=%date:~7,2%
0
MLV