コピー元にドライブを指定すると隠し属性が付与されてエクスプローラから見えなくなる。終了コードでエラー判定して正常終了していたので気づくのに時間がかかった。。。
ただ、コピー自体はできているので、フルパスを指定すれば見える。けど、エクスプローラでアクセスして見えないのは気持ち悪い。
それに、取れてないじゃん、いやドライブごとコピーしてるから隠しz・・・という無駄なやり取りが頭に浮かんだので対処した。
こんな状況でした
まず、日次でバックアップを行っており、タイトルの通り Robocopy コマンドを使っている。
具体的には以下のような感じでコピー先にドライブ名を指定していた。オプションはこの事象には関係ないし長いので割愛。
1 |
robocopy \\172.16.1.10\D$ E:\BackupDir\HOSTNAME\yyyymmdd $Option |
たとえば、コピー元に
\\172.16.1.10\D$\TEST
というフォルダがあった場合、
E:\BackupDir\HOSTNAME\yyyymmdd\TEST
などとフルパス指定でアクセスすると TEST フォルダ内のファイルが問題なく見える。ただ、
E:\BackupDir\HOSTNAME\yyyymmdd
とアクセスした場合は、何も表示されない。
ということで、隠し属性を取っ払っちゃいましょう。
対処
ファイルの属性を設定する attrib というコマンド使います。構文は以下。
attrib [属性(付与・解除)] [ファイル・フォルダパス] [オプション]
隠し属性を解除するには、-H と指定することで解除ができます。付与する場合は、+H になります。実行したところ、、、
1 2 |
> attrib -H "E:\BackupDir\HOSTNAME\yyyymmdd" システム ファイルは再設定できません - E:\BackupDir\HOSTNAME\yyyymmdd |
システムファイル属性も付与されているようですね。データ用のドライブなんですがお構い無しです。
システムファイル属性を解除するためには、-S と指定することで解除ができます。付与する場合は、+S になります。実行したところ、、、
1 2 |
> attrib -S "E:\BackupDir\HOSTNAME\yyyymmdd" 隠しファイルは再設定できません - E:\BackupDir\HOSTNAME\yyyymmdd |
、、、どうしたらええねん!
調べてみるとMicrosoft社のテックネットに情報がありましたが、一緒に(1回で)実行するようです。実行したところ、
1 |
> attrib -S -H "E:\BackupDir\HOSTNAME\yyyymmdd" |
何の反応もありませんが、エクスプローラでアクセスしてみると見えています。無事に2つの属性が解除されたようです。
まとめ
ロボコピーでドライブごとコピーすると、コピー先のフォルダやファイルに隠しファイル属性とシステムファイル属性が付与されてしまうようです。
スクリプトでバックアップをしている場合は、Robocopyコマンドの実行後にコピー先のフォルダに対して、以下のように1行足して隠し属性を解除する必要があります。
1 |
attrib -S -H $BackupDir |
そもそも、ドライブを指定しないでRobocopyを実行する方法もあります。以下よりどうぞ。
-
【Robocopy】ドライブを指定せずにドライブをまるごとバックアップする!フォルダ除外も可能!
改めてタイトルをみるとなんのこっちゃという感じですね。 下で説明しますが、備忘録がてらスクリプトを作成したのでメモしておきます。ファイルサーバのデータ移行のときに使い回せるといいなぁ。 ...
↓↓↓ 持っていると便利な一冊。