Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

2つのフォルダの差分だけを別フォルダに抽出する。

前提
 VaMで配布されたオリジナルのファイルの入ったフォルダをFoderAとする。
 これはそのまま保存しておきたい。
 なので、丸ごとコピーしてFolderBを作成する。
 普段はFolderBを使ってアセットやシーンはここへ追加していく。

やりたいこと
 FolderAとFolderBを比較して変更のあったファイルや追加されたファイルだけを取り出してFolderCにコピーしたい。

動機
 バージョンアップがあったとき、Folder_BでUpdatorを実行するという手もある。
 この方法だと、もういらないもの、使ってないファイルまで含まれたままになってしまう。
 どんどんゴミがたまって肥大化してる感じがする。
 ところが、必要なものだけ探し出すのが結構面倒だ。
 そこで、差分だけ抽出しておけば、探す対象が絞りこめているので楽ができるかも。

ここで見つけた方法を試してみる。
 # FolderBのコピーをFolderCに作る
 copy-item FolderB FolderC -Recurse
 # robocopyで差異がないファイルだけFloderCからFolderAに移動する
 robocopy FolderC FolderA /xc /xn /xo /xx /xl /is /E /move
コンセプトは簡単だ。
 まず、変更のあるフォルダの複製(FolderC)を作る。
 FolderCとFolderAを比較して、違いのないファイルをFolderAへ移動してやる。
 FolderCには追加されたファイルと変更のあったファイルが残っているはず。
つまりFolderCに差分が抽出されたことになる。

PowerShellを起動して上のコマンドをコピペしてEnterするだけだ。

問題
 全部スキップされた。
 /vオプションでログを確認すると「古い」ので移動されないケースが多い。
 確認すると、内容は同じはずのファイルで、更新日時は同じなのに作成日時が異なっているものがスキップされていた。
 ていうか、作成日時より更新日時の方が前って何だ?どっかからコピーしたらその日付が作成日時になる?
 内容ではなく日時で新旧を判断してるので致し方ないところか。
 VaMの性質上スクリプトを自分で変更する以外は日時は考慮する必要は無いものとし、自作スクリプトはそもそもFolderAには存在しないので問題ないと考えることにした。
 結果、時刻関連のオプションは付けないことにした。

重複ファイルの削除ツールはよく見かけるのだが、フォルダ間の比較という機能が無いように思う。
元フォルダ内の重複ファイルまで探してしまうものしか見つけられなかった。

追記(2020/09/07)
どうも思ったような処理をしてくれなくて、結局昔VBで作ったプログラムを引っ張り出してきた。
自分で作って何やってるか知ってるものが一番かゆいところに手が届く。
File Folder Comp (初稿 2005/07/14)

このエントリーをはてなブックマークに追加

Posted under: VB6 Programs, Windows10 Pro 64BIT


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.