同一ファイル名が複数のフォルダに分散して存在する場合に そのファイルを開けずに確認するには、
更新日時で追い掛けるのが最も簡単です。
それを実現する為の、 robocopy コマンドを紹介します。
さて、ファイルには、作成日時 (Created Date) や 更新日時 (Modified Date) という項目がある訳ですが。
これらは、そのファイルの履歴を追い掛ける為に付いています。
パソコンも初期の頃はそれが十分活用出来ました。
しかし、現在、これを妨げているのは、ドライブやネットワークを越えての移動 や コピー 作業です。
Windows は、これらのコピーに対して、新しい作成日時を与えます。
つまり、内容的に同一のファイルとしてコピーしても、建前上、別の新しいファイルを作った事にして、区別出来る様にしています。
ある意味では便利ですが、ある意味では不便です。
また、ファイルの中身は、データそのものと付加情報とに分かれます。
例えば、写真。
画像データが同じでも、プロパティと呼ばれる情報(例えば、レイティング・評価)を加えれば、ファイルデータ的には別物ですね。
でも、同じ写真なのに。 厳密には、画像データ自体も保存方法が変更されているケースが多いと思います。
2番目は、ファイルの構造を理解し操作しないといけないので、通常は別物として扱うのが順当なのでしょう。
しかし、最初の例で、単なるファイルコピーで日付が狂ってしまうのは避ける事が可能です。
それを実現するのが、コマンドプロンプトで robocopy というコマンドを使う事です。
元々、この robocopy は、クライアント・サーバー環境で、フォルダやファイルを管理する為に導入された経緯があります。
ファイルの所有権や各種属性を保持したままコピーしたり、フォルダを複製したり(ミラーリング)、 と言った機能があります。
つまり、クライアント(通常のパソコン)がファイルを扱うのと 異なり、
ファイルのバックアップを採ったり リカバー(復元)を提供する為に使われます。
現在では、サーバー特有の機能ではなく、一般の Windows パソコンにも標準装備されています。 Vista 以降。.
使い方は。
コマンドプロンプト ( cmd.exe ) を開き、以下のコマンドで、ヘルプが見れます。
使う前に、目を通しておきましょう。
robocopy /?
基本は以下です。 c:¥ のピクチャに設けた photos¥abc¥123 フォルダを m:¥ 配下の同一名にコピー 対象は全ファイル.
robocopy の後、半角スペースに続くのは、最初が元フォルダ、次がコピー先フォルダです。
コメンドでは、各項目の間に 半角スペースをひとつ 入れます。 これは、コマンドプロンプトの 決まり事 ですね。
robocopy c:¥users¥YourName¥pictures¥photos¥abc¥123 m:¥photos¥abc¥123
ここで、属性もフォルダのタイムスタンプをも合わせる場合
robocopy c:¥users¥YourName¥pictures¥photos¥abc¥123 m:¥photos¥abc¥123 /DCOPY:T /COPYALL
ふたつのフォルダの後に半角スペースを挟み、ファイル名スケルトン(例:DSC_0123.*) 指定が可能です。
この例では、 DSC_0123. のファイル名で拡張子に係わらず全てが対象になります。.
robocopy c:¥users¥YourName¥pictures¥photos¥abc¥123 m:¥photos¥abc¥123 DSC_0123.* /DCOPY:T /COPYALL
尚、フォルダ名に半角スペースを含む場合には、" " で括る必要がありますし、
可能なら、フォルダ名に日本語は避けておくべきです。 半角英数で作っておけば問題が少ない!
特に、OS を跨ぐ環境を構築する場合には必須かもですね。 ( Linux や Mac の混在 )
例: c:¥users¥YourName¥pictures¥abc de¥123 > "c:¥users¥YourName¥pictures¥abc de¥123"
また、大元の撮影メディアからデータ転送する場合に上記の方法を使えば、ほぼ、撮影時と同じ構成にする事も可能です。
メディア(j ドライブ)では j:¥DCIM¥MakerSettingFolderName *1. 配下に jpg および RAW ファイル。
この構造を知っていれば、メディアへからのコピーも、逆にメディアへの書き出しも。
更に、指定フォルダのサブ フォルダ以下の階層に対しても再帰的に処理を行う場合 *2.
コマンドスイッチ /S (空フォルダ除外) または /E (空フォルダ含む) を追加 *2.
robocopy の基本は、対象フォルダ内の ファイル *2.
robocopy c:¥users¥YourName¥pictures¥photos¥abc¥123 m:¥photos¥abc¥123 /S /DCOPY:T /COPYALL
この例では、全ファイルが対象 ファイル名スケルトン指定なしの場合 *2.
参考 URL と 参考コマンド Mac もお使いの方に。
WindowsからMacへのrobocopyでタイムスタンプがコピーできない場合の対処法 - MacRuby MacRuby さまのサイト
http://macruby.info/windows/windows-mac-robocopy-timestamp.html
robocopy D:¥Data¥Source¥ E:¥Data¥Target¥ /MIR /R:1 /W:0 /ETA /TEE
Mac の環境は持ち合わせませんので、何か不明な点があれば、別途、検索して下さい。.
何か不明な点がああれば、分る範囲でお答えします。.
[2014/11/04] メディアの Folder構成の間違い訂正 *1.
j:¥DCIM¥MakerSettingFolderName¥SubFolderName > j:¥DCIM¥MakerSettingFolderName
[2014/11/05] 不明瞭な表現を訂正
[2015/04/15] 再帰用のスイッチの件を追記 *2.
hoto_imuです。
返信削除robocopy 試してみました。デジカメで撮った画像をタイムスタンプを合わせてHDDに保存するためです。
はじめ /COPYALL で引っかかってしまいましたが、管理者として実行することで解決。
コピー先にフォルダーを作ってくれて、このフォルダーの更新日時も合ってます。
*.JPG と *.NEF をそれぞれ挟んで2回実行すると、JPEGとRAWを別々のフォルダーに分けることができ、これは便利です。
勢いで、 SD2HDD の名前でバッチファイルを作っちゃいました。ありがとうございます。
hoto_imu さま コメントありがとうございます。
削除便利でしょう、robocopy 。
/COPYALL では セキュリティ(アクセス指定)や所有者や監査といった情報を保持出来る為、管理者での実行が要りましたね。
メディアからの移動時にはあまりメリットが無いですが、その後の PC 上の移動やコピーでは 威力を発揮します。
おお、バッチファイルをお作りですか。 これで、楽 出来ますね。
尚、本題から外れますが、Explorer で Folder を開かないで下さい。 desktop.ini が作られます。
また、オリジナル重視の観点から、/A+:R を Command に追加し、ReadOnly にする方法もあります。