- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2019-07-06T17:58:56+09:00","","")
#author("2019-07-09T00:18:34+09:00","","")
#navi(../)
* PowerShellで指定したディレクトリ配下にある読み取り専用ファイル・フォルダの一覧を取得する [#f120d615]
「このフォルダ配下のいくつかのファイルやフォルダ、確か読み取り専用に変更してしまったけど、どのファイルだったか覚えていない!」~
「読み取り専用になっているファイルとフォルダの一覧が欲しいなぁ」と思われた方、本資料が役に立つと思います。
#htmlinsert(win-top.html)
#contents
* 関連記事 [#pde7bcf9]
-[[フォルダのみ読み取り専用にする方法・attrib>コマンドプロンプト/フォルダのみ読み取り専用にする方法・attrib]]
-[[PowerShellで読み取り専用ファイル・フォルダの一覧を取得する>PowerShell/読み取り専用ファイル・フォルダの一覧を取得する]]
-[[コマンドプロンプトでファイル属性の表示および変更・attrib>コマンドプロンプト/ファイル属性の表示および変更・attrib]]
-[[コマンドプロンプトでフォルダのみ読み取り専用にする方法・attrib>コマンドプロンプト/フォルダのみ読み取り専用にする方法・attrib]]
-[[ディレクトリをツリー構造で表示する・tree>コマンドプロンプト/ディレクトリをツリー構造で表示する・tree]]
* ファイルおよびフォルダが読み取り専用になっているファイル一覧を取得する [#ace552e4]
以下のように「読み取り専用」属性があるファイルやフォルダのフルパス名を表示する関数になります。
#ref(01.png)
以下の関数(スクリプト)は指定したフォルダ配下に存在するファイルおよびフォルダに対し、読み取り専用になっているかどうかを調べ、~
読み取り専用になている場合は、画面にそのファイルのフルパスを出力します。~
また、単一のファイルを指定しても動作します。
#ref(sample.zip)
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
}
}
}
** 実行例 [#zb160b2c]
本関数の使い方は以下の構文になります。
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コマンドを使ってフォルダのみ読み取り専用にする方法を公開しています。
-[[フォルダのみ読み取り専用にする方法・attrib>コマンドプロンプト/フォルダのみ読み取り専用にする方法・attrib]]
以上、PowerShellで読み取り専用のファイルおよびフォルダ一覧を表示するPowershellスクリプトでした。
#htmlinsert(win-btm.html)