パスワードを忘れた? アカウント作成
484284 journal

patagonの日記: [コンピュータ]簡単な仕組みでファイル、フォルダの同期をとる…続き(コマンド) 2

日記 by patagon

鼻が少し詰まっているので養生中というか自宅警備中。病院にも行ってないので怒られるな、こりゃ。

[コンピュータ]簡単な仕組みでファイル、フォルダの同期をとる(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の/Dオプションがおかしい件について

(略)コピー先とコピー元をネットワークドライブを対象にすると、タイムスタンプが変わっていない(更新されていない)ファイルもコピーしてしまう。

***
かっこ悪いがコツコツとやる場合。実際はサーバ上のログファイルに日時、コンピュータ名を出力するんだけど。

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/? でヘルプを読むこと。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2007年09月22日 15時57分 (#1223145)
    XCOPYにはいろいろ悩まされました。多分期待通りに動かないというか、動くことを確認しないことが多いコマンドの一種。オプションも一度は見るども画面からはみ出す微妙な長さ。必要そうなものから列挙するかとはじめると、/s /e /x /o /kとか選んでしまう私が居る
typodupeerror

アレゲはアレゲを呼ぶ -- ある傍観者

読み込み中...