[前の記事]« 空の仮想デバイス名は「NUL」
[次の記事]過去のコマンド実行結果をさかのぼって参照したい »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「COPY,XCOPY…ファイルやディスクの複写・連結・バックアップ」索引へ

同名ファイルのタイムスタンプを比較し、同じなら複写しない処理

1068.
タイムスタンプ比較による処理分岐について
2006年03月20日(月) 14時04分
コマンダー
●DOS/Windowsのバージョン↓
winXP Pro[5.1.2600]
(以下ご自由に質問文をお書きください)
いつもお世話になっております。

以下の様なファイル構成で運用をしています。
・file_bkup(バックアップ)
・file_operation(運用ファイル)
・file_master(マスターファイル)

管理者がマスターファイルのみ更新を行い、他は更新は行いません。
マスターファイルに更新があった場合は、
 運用ファイル → バックアップ へコピー
 マスターファイル → 運用ファイル へコピー
という運用をしたいと思っております。
運用ファイルは業務中に更新出来ないので、夜間バッチ処理を考えています。

xcopy /D 2行にて作成したのですが、マスターファイルが更新していない場合でも、
 運用ファイル → バックアップ へコピー
が走ってしまい、バックアップがとれない事に気づきました。(毎晩自動タスクで走らせる為)
コピーの前に、マスターファイルと運用ファイルのタイムスタンプを比較し、同じならば何も処理をしないという事を行いたいのですが、どのようにすれば良いのか解りません。
どなたかやり方について御享受下さい。
よろしくお願い致します。
1069.
Re:タイムスタンプ比較による処理分岐について
2006年03月22日(水) 21時03分
Hellcat
フリーソフトが使える環境ならば、次のような方法があります。

BATUTY(BU)というフリーソフトを使います。

BU TIMESTAMP file1 file2
if errorlevel 2, goto file2_NEW

こんな感じです。
BUが返すリターンコードは下記の通りです。

  2つのファイルのタイムスタンプを比較
         Ret= 0 : 同じ
                   1 : file1 の方が新しい
                   2 : file2 の方が新しい
                  10 : file1 が見つからない
                  20 : file2 が見つからない
                  50 : file1 アクセスエラー
                  60 : file2 アクセスエラー
                 255 : エラー(ファイルが2つ指定されなかった)

BUは
 http://www.vector.co.jp/soft/dos/util/se023753.html
にあります。
DOSのツールですが動くと思います。
1072.
Re:タイムスタンプ比較による処理分岐について
2006年03月23日(木) 15時53分
otn
>コピーの前に、マスターファイルと運用ファイルのタイムスタンプを比較し、同じならば何も処理をしないという事を行いたいのですが、どのようにすれば良いのか解りません。

1分以内に複数回マスター更新されることは無いという前提を置くと、

for %%A in (file_master) do for %%B in (file_operation) do if "%%~tA" neq "%%~tB" copy file_operation file_bkup&copy file_master file_operation

と更新日時分を取得できるので、長い行になりますが出来ます。 

1分に複数回更新が入る場合は上記方法が使えないのでやや面倒ですが、
for /f %%F in ('dir /b /od file_operation file_master') do set A=%%F
for /f %%F in ('dir /b /od file_master file_operation') do set B=%%F
if %%A%%B==file_masterfile_master copy file_operation file_bkup&copy file_master file_operation

タイムスタンプが同一のときはdirのオペランドに書く順序によって /od の結果が違うようなので、dir /od は2回実行が必要です。また、保存されるタイムスタンプは秒単位のようなので、1秒以内に複数回masterが更新されるケースではだめです。
1073.
マルチステートメントの投稿に注意
2006年03月23日(木) 15時55分
otn
今の投稿で気づいたのですが、
copy A B&copy X Y
と書いて投稿すると、
copy A B© X Y
と、「&copy」がコピーライトマークになってしまいます。
回避するためには、
copy A B&copy X Y
と書く必要あり。

やっぱり、プレビュー大事。
1074.
Re:タイムスタンプ比較による処理分岐について
2006年03月23日(木) 15時58分
otn
訂正です。

>if %%A%%B==file_masterfile_master copy file_operation file_bkup&copy file_master file_operation

if %%A%%B== じゃなくて、if %A%%B%== でした。
1079.
Re:タイムスタンプ比較による処理分岐について
2006年04月07日(金) 16時53分
コマンダー
ありがとうございました!

本当に助かりました。
 
 
 


カテゴリー「COPY,XCOPY…ファイルやディスクの複写・連結・バックアップ」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2006年03月20日 12:38に投稿されたエントリーのページです。

ひとつ前の投稿は「空の仮想デバイス名は「NUL」」です。

次の投稿は「過去のコマンド実行結果をさかのぼって参照したい」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート