Robocopyでコピーをした際、コピー処理はちゃんと実行されているのに、コピー先フォルダが見えない、という経験ありませんか?
コマンドプロンプトでRobocopyを実行し、コピー処理がちゃんと実行されている様子がログからわかるのに、コピー終了後いざフォルダを見に行こうとすると、コピー先フォルダが存在しない(エクスプローラで表示されていない)という事象です。不思議なことに、コピー先フォルダのパスを直接エクスプローラに入力するとコピーされたフォルダの中身がちゃんと表示されます。
この事象は、「NTFSドライブのルートフォルダ」を「(ルート以外の)フォルダ」にコピーした場合に起こります。例えば、以下のようなコマンドを実行した場合です。
robocopy d:\ z:\backup\d-drive /mir /dcopy:dat
NTFSの仕様上、ドライブのルートディレクトリには、「隠し属性」と「システム属性」がついているのですが、robocopyはそれを忠実にコピー先フォルダにコピーしてしまうのです。そのため、コピー先のフォルダが隠しフォルダ&システムフォルダになってしまい、エクスプローラのデフォルト設定では、非表示になってしまうのです。この動作は、NTFS、Robocopyの仕様ということなので、正常な動作ということだそうです。
コピー元がネットワークドライブだった場合も、そのフォルダがNTFSのルートフォルダであった場合、同じ事象が発生します。例えば、以下のrobocopyコマンドで、\\server\share がNTFSのルートフォルダであった場合、コピー先フォルダは隠し&システムフォルダになってしまいます。
robocopy \\server\share z:\backup\share /mir /dcopy:dat
なお、コピー元が NTFSでない場合(FAT等)は、コピー先フォルダに隠し属性、システム属性はつきません。
コピー先フォルダは、バックアップコピーであれば、隠し属性、システム属性を付けておく必要はありませんので、通常のフォルダに戻しておいたほうが良いです。
隠し属性、システム属性を削除し、通常のフォルダにするためには、attribコマンドを使います。robocopyコマンド実行後、attribコマンドを実行します。
robocopy d:\ z:\backup\d-drive /mir /dcopy:dat
attrib -s -h z:\backup\d-drive
-s, -h はそれぞれシステム属性、隠し属性を削除する設定です。隠し属性、システム属性両方ついている場合、attribコマンドは、-s のみ、または -h のみでは実行できませんので、両方同時に指定して実行してください。ファイル名にスペースを含む場合は "~"でくくってください。
コマンドから実行するしかないので、上記のように、robocopyコマンドに続けて実行するようバッチファイルに記述しておくのが良いと思います。
RobocopyのGUIツール RoboSyncでは、設定項目にチェックを入れるだけで、robocopyコマンド実行直後に、attrib コマンドを実行させ、コピー先フォルダの隠し属性とシステム属性を削除することができるようになっています。
RoboSyncのコピー項目設定画面で、コピー元フォルダがルートフォルダであった場合、付けておいたほうが良い設定項目が赤くハイライトされます。
「コピー元が~ "attrib -s -h"を実行する」 の項目をチェックします。(ついでに、"System Volume Information", "$RECYCLE.BIN" フォルダを除外する項目にもチェックを付けておきます。)
すると、robocopy実行直後に attrib コマンドが実行コマンドが実行されるよう設定されます。
この attrib コマンドを実行する設定は、RoboSyncで生成するバッチファイルにも含まれますので、バッチファイルの中で Robocopyコマンドと一緒に実行されます。
attrib コマンドのオプション指定方法について記事にしています。
RoboSync: RobocopyのためのGUIツール
本サイトで公開しているツールです。ダウンロードはこのバナーをクリック!
Version 1.3.27 をリリースしました! (2021/1/1)
RobocopyをGUIから実行できるようにするツールです。コマンドプロンプトを表示することなく、GUI画面からほぼマウス操作だけで実行までできます。
Robocopyがバックグラウンドでそのまま実行されますので設定に迷うことはありません。
・ 複数のコピー項目の作成と管理。
・ スクリプトファイル(バッチファイル)出力が可能。スケジューラによるバックグラウンド処理にも使えます。
・ Robocopyによるコピー実行前に、実行プレビュー(/L)、パラメータのチェック(/QUIT)が可能。
・ Robocopyのパラメータ設定の簡易チェック、Robocopy実行前の簡易チェックを行います。
・ Robocopy実行前後で実行するスクリプトを定義可能。
・ Robocopy実行途中での中断、実行ログの履歴管理と保存が可能。
【関連記事・関連コンテンツ】