「このフォルダ配下のいくつかのファイルやフォルダ、確か読み取り専用に変更してしまったけど、どのファイルだったか覚えていない!」
「読み取り専用になっているファイルとフォルダの一覧が欲しいなぁ」と思われた方、本資料が役に立つと思います。
以下のように「読み取り専用」属性があるファイルやフォルダのフルパス名を表示する関数になります。
以下の関数(スクリプト)は指定したフォルダ配下に存在するファイルおよびフォルダに対し、読み取り専用になっているかどうかを調べ、
読み取り専用になている場合は、画面にそのファイルのフルパスを出力します。
また、単一のファイルを指定しても動作します。
function Get-ReadOnlyList($pathtofile) { if ([String]::IsNullOrEmpty($pathtofile)) { Write-Host "ERROR: argument is invalid." return $FALSE } if (!(Test-Path($pathtofile))) { Write-Host "ERROR: file or directory not found." return $FALSE } Get-ChildItem -Recurse $pathtofile | % { if((Get-ItemProperty( $_.FullName )).Attributes.ToString().Contains("ReadOnly")) { $_.FullName } } }
本関数の使い方は以下の構文になります。
Get-ReadOnlyList ディレクトリまたはファイル
実際に以下のようなディレクトリを作成し、いくつか読み取り専用にしました。
コマンドプロンプトのtreeコマンドを使ってツリー表示しています。
D:\>tree /f test フォルダー パスの一覧: ボリューム SD32GB ボリューム シリアル番号は 1234-1234 です D:\TEST │ a.txt │ b.txt │ c.txt │ d.txt │ ├─a │ aa.txt │ ab.txt │ └─b ba.txt bb.txt
上記の a.txt, a\aa.txt, b\bb.txt, a を読み取り専用にし、今回紹介した関数(スクリプト)を実行してみます。
PS D:\> Get-ReadOnlyList .\test D:\test\a D:\test\a.txt D:\test\a\aa.txt D:\test\b\bb.txt
ちなみにフォルダのみ読み取り専用にするには、GUI操作をしてもできません。
attribコマンドで今回はフォルダを読み取り専用にしました。
以下にattribコマンドを使ってフォルダのみ読み取り専用にする方法を公開しています。
以上、PowerShellで読み取り専用のファイルおよびフォルダ一覧を表示するPowershellスクリプトでした。