2014年10月12日日曜日

【Windows7】ファイルアクセス権のトラブルをコマンドプロンプトで解決

先日、Windows7の再インストールをしました。
(関連記事)
Windows7の再インストールでライセンス電話認証(1年ぶり2度目)



なぞのユーザーを削除したら・・・

 ドキュメント、画像や動画などは、システムドライブとは別にHDDに保存しています。
再インストールした後にこれらのフォルダのプロパティをのぞいてみて、あることに気づきました。
なぜか読み取り専用にチェックが入っていました。
そして、アクセス権があるユーザー欄をみると、アルファベットと数字の長いユーザー名がありました。

 なんか気持ち悪いなーと思い、このユーザーを削除しました。
するとなんかメッセージがでたのですが、気にせず他のフォルダでの当該ユーザーを削除をしました。

そして、そのフォルダを開こうとしたとき、メッセージがでました。「アクセス権がありません」と。

なんのことか最初は分かりませんでした。長い間使ってきたフォルダなので、これまでの様々なデータが入っています。アクセスできないと困ります。


プロパティをよく調べてみました。

セキュリティタグの詳細設定から所有者タグを開くと、「現在の所有者を表示できません。」と表示されています。

どうやら削除したユーザーがフォルダの元々の所有者だったのでしょう。再インストールする前に使っていたアカウントが、再インストールによって消滅して変な表示になったのかもしれません。


アクセスできるようにいろいろいじってみた

どうしたらアクセスできるようになるか?
いろいろ試してみました。

どうやら、まずは所有者を設定する必要があるようです。さきほどのセキュリティタグの詳細設定の所有者タグで、所有者を現在のアカウントに設定し直します。
いったんプロパティを閉じてもう一度セキュリティタグを開きます。
アクセス許可を変更するために編集ボタンを押して、現在のアカウントを追加してフルコントロールのアクセス権を設定します。

こうすることでなんとかフォルダが開けるようになりました。
しかしながらフォルダの中のサブフォルダやファイルにはまだアクセスできません。どうやら一つ一つの所有者とアクセス権を変更しないといけないようです。
いったいいくつあるんだ? 本当に途方に暮れそうです。

いくつかのフォルダとファイルを修正しましたが、先はとても長そうです。
そんなときふと思いました。もしかしたら一括で処理する方法があるじゃないかな?


コマンドプロンプトを使うといいらしい

ググってみたら次の記事を見つけました。やっぱり方法はありました。
(参考)
 windows7 一括でオーナー変更、アクセス権変更 - kaze-kaoruの日記

 コマンドプロンプトで「takeown」と「icacls」コマンドを使えばいいようです。

コマンドプロンプトというのは、スタートメニューのすべてのプログラムのアクセサリから開くことができます。
エクスプローラでの視覚的なファイル操作ではなく、コマンドを使って文字だけの表示でファイルを操作するものです。
いろいろなオプションを使うことができるので、エクスプローラよりも細かいファイル操作をすることができます。

一応私はコマンドプロンプトを使ってことがあります。
ゲームでRamdiskを使っていた時に、ゲームのデータをRamdiskへコピーしたりシンボリックリンクを作ったりするのに使っていました。


「takeown」コマンドで所有者変更

所有者を一括変更するには「takeown」コマンドを使います。
コマンドプロンプトで次のように入力します。

takeown /s コンピューター名 /u ユーザー名 /f フォルダのアドレス /r /d Y

/s はコンピュータ名を入力するのに使います。
/u はユーザー名を入力するのに使います。
/f はフォルダのアドレスを入力するのに使います。ドライブ名から正確に入力してください。
/r はサブフォルダやフォルダ内のファイルにも適用するために使います。
/d は「はい/いいえ」と聞かれたときにどうするかを決めるものです。Yは「すべてはい」とする設定です。


「icacls」でアクセス権を変更

アクセス権を一括で設定するには「icacls」コマンドを使います。
コマンドプロンプトで次のように入力します。

icacls フォルダアドレス /grant ユーザー名:F /t /c /l /q

フォルダアドレスは「takeown」のときと同じようにドライブ名から入力します。
/grant は、次のユーザーにアドレス権を与えるという意味です。
:F はフルコントロール権を与えるという意味です。
/t はサブフォルダやフォルダ内のファイルにも適用するために使います。
/c はエラーがでても無視して次のファイルの処理をするという意味です。
/l はリンクファイル自体のアクセス権を変えるという意味です。
/q は成功時にいちいちメッセージを表示しないという意味です。


コマンドプロンプトって便利ですよ

こうしてコマンドプロンプトで一括処理することができました。
ちなみにミュージックフォルダだけでも約22,000個のファイルがありました。
手動でひとつひとつやっていたら、絶対に心が折れていたかと思います。

コマンドプロンプトって本当に便利ですね。
こんなことできないかな?って思ったら調べてみる価値はありそうです。

興味を持たれた方は、ファイルのコピーなどから勉強されるといいかと思います。
「コマンドプロンプト」で検索すればいろいろなサイトが見つかりますよ。

0 件のコメント:

コメントを投稿