patagonの日記: [コンピュータ]簡単な仕組みでファイル、フォルダの同期をとる…続き(コマンド) 2
鼻が少し詰まっているので養生中というか自宅警備中。病院にも行ってないので怒られるな、こりゃ。
[コンピュータ]簡単な仕組みでファイル、フォルダの同期をとる(VBS)の続き
何気に
XCOPY/? とヘルプを見ていると
/D:月-日-年 指定された日付以降に変更されたファイルをコピーします。
日付が指定されなかったときは、送り側の日付が受け側の日付より
新しいファイルだけをコピーします。
この手があったか。自分の場合は送り側のファイルやフォルダの削除は、受け側に反映する必要がないからこれで十分だ。あっさりじゃんかよ。
REM sample1.bat
XCOPY /D /S /E /H /C /Y /R /Q \\Server1\nantoka\folder1\env "C:\Program Files\forder1\env"
その他
YCOPY:Windows の XCOPY コマンドに 同期化機能(ミラーリング)を付加します(コンソールアプリケーション)。
Microsoft Windows Server 2003 TechCenter Xcopy
XCOPYの終了コードをECHOして拾ってみたが、コピー対象ファイルがなくても正常終了で0を返す。本当にコピーした時だけを判別してログに出したいんだけどな。もうちょっと考えてみるか。find か findstr 使うしかないか。使えるかな?
VBSではコピー実施のオブジェクトの下にcmd.exe /c echo コピー済み %DATE% %TIME% %HOSTNAME(前もって割代入)% >> \\Server1/namtoka\folder1.log.txt みたいな感じ(実際はバッチファイルをRunShell)でコピーがあった時だけサーバ上にログを出力(追記)してたんだけど。
コピー済み 2007/09/22 08:45:12.11 HOSTNAME01
コピー済み 2007/09/22 08:53:18.21 HOSTNAME02
(略)コピー先とコピー元をネットワークドライブを対象にすると、タイムスタンプが変わっていない(更新されていない)ファイルもコピーしてしまう。
***
かっこ悪いがコツコツとやる場合。実際はサーバ上のログファイルに日時、コンピュータ名を出力するんだけど。
xcopy /E /I /Y /D /Q \\Server1\nantoka\folder1\env "C:\Program Files\forder1\env" > "C:\Program Files\folder1\copy.log"
FIND "個のファイルをコピーしました" "C:\Program Files\folder1\copy.log"
IF ERRORLEVEL 1 GOTO NAI
IF ERRORLEVEL 0 GOTO ARU1
:NAI
ECHO NAI
GOTO END
:ARU1
ECHO コピーはあったが 0個かもしれない。1個以上かもしれない。
FINDSTR /B /C:"0 個のファイルをコピーしました" "C:\Program Files\folder1\copy.log"
IF ERRORLEVEL 1 GOTO ARU2
IF ERRORLEVEL 0 GOTO END
:ARU2
ECHO 1個以上のファイルをコピー
GOTO END
:END
燈明日記(2006/10) ERRORLEVEL比較時の注意点
IF/? でヘルプを読むこと。
XCOPY (スコア:0)
Re:XCOPY (スコア:1)
コピー元、コピー先がネットワーク上だと適切にコピーできないようです
http://anond.hatelabo.jp/20070725151629 [hatelabo.jp]