ある フォルダ 以下に構築された フォルダ構造(フォルダ ツリー) を別のフォルダの配下として 複製 したい事があります。
数が少なければ、手動でコツコツと手入力すれば おしまい ですが ... 。
間違いを避けたり、正確さを求める場合には こんな方法もあります。
具体的にご説明する前に、どんな状況か お話して置きましょうか。
例えば、あるソフト(以下、親ソフト)が管理するフォルダに 独自の機能を盛り込みたいとします。
充分に、そのソフトの仕組みが理解出来ていれば、 直接、そのフォルダに手を入れる事も可能ではあります。
しかし、今度は、パフォーマンスの問題が生じたり、 今後の親ソフトのアップデートで弊害が生じる恐れもあります。
対応策の ひとつ は、 独自なフォルダ構造を別の場所に複製構築し、そこにアクセスする事です。
こうする事で、 親ソフトは 今迄の様に稼動し、 独自機能は 親ソフトに干渉する事がなくなります。
さて、前置きはこれ位で。
手順を書きます。
使うのは コマンドプロンプト の Robocopy です。
親ソフトの基点フォルダを SourceDir 拡張機能の基点フォルダを ExtensionDir とした場合のコマンドは。
Robocopy SourceDir ExtensionDir /S /Dcopy:T /XF:*.*
注: 最下をご覧下さい。
これで、ファイル群はコピーされないけれど フォルダ群はコピーされて、 日付情報もそのまま な フォルダ ツリー が出現します。
尚、上の例では、ファイルの無い 空フォルダ は 複製されません。 .
親ソフトでの追加に対しては、 何時も、このコマンドを 内容固定で 実行すれば良い事になります。
ここで、留意点を ひとつ。
Robocopy は 親ソフトが 名前更新した フォルダ を検知出来ない事です。
変更後のフォルダそのものは 問題無く 複製されます。 しかし、
変更前の名前の 独自機能でのフォルダに収められていたデータは 新しい名称のフォルダに複製出来ません。
ですから、この様な用途では、 削除も反映してしまう Mirror オプションは、危険でもあります。.
親ソフトに 更新の通知機能が無い以上、 何か方法を模索しなくては。
考えられる手段のひとつに ファイルシステムの監視機能がありますが、 大袈裟ですね。
用途や頻度や要求精度によっては、これを検討する事になりそうです。
でも、通常は、 いつ変更が行われるか分らないので、常時監視の状態 が発生しますから、 う~ん、悩ましい。
面倒ですが、 ファイル監視で通知機能を持つサービスを作り、これを親ソフトの起動をトリガとするタスクで登録でしょうか。
はたまた、 System.IO.FileSystemWatcher クラスを使ったアプリを書くのでしょうか。
やはり、... 億劫 ... 。
そして、何度も 変更を繰り返す可能性があるとしたら、 ... 。
変更してから元の名称に戻しても 変更があった事になってしまっては 困りますし。 う~ん。
簡単明快なのは、 ある時点に、 ふたつのフォルダからサブ以下を列挙させて、比較する方法でしょうか。
プログラミング言語であれば、 コレクション等の差分を作る メソッド がありますので、これを利用する事になるのでしょうか。
即応性が必要無く、ある時点での比較で済むのなら、 この様な 方法 も考えられますね。
いずれにしても、 これらの対応は 簡単にはいかない です。 様々なケースが想定されますので。
ファイルシステムが 綿密に絡むアプリや パソコン設定は なかなか 難しいです。
<注記> 2020/10/29 加筆
現行 Windows 10 v2004 では上記コマンドは機能しません。
代わりに、こちらを。 参考 URL https://shiroyuki-mot-says.blogspot.com/2020/11/pc-robocopy-folder-only-2.html
Robocopy SourceDir ExtensionDir /E /Dcopy:T /XF *.*
[2020/11/04] 加筆にリンクを追記
0 件のコメント:
コメントを投稿