指定フォルダ(現在のフォルダ)内のフォルダ、ファイルから、読み取り専用を判定し取得したい。
目次
説明
まずは、Get-ChildItemコマンドレットでフォルダ内の情報を取得してみる。
Get-ChildItem -Path . -Recurce
パスを指定。
相対パス:現在のフォルダー ピリオド( . )
現在のフォルダの親フォルダ 二重ピリオド( .. )
すべての子コンテナ内の項目も取得する。
Recurceパラメータ
実行結果。
ディレクトリ: C:\Users\0905s\MY_WORK\PowerShell\SAMPLE01
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2024/07/13 17:23 FOLDER_01
d----- 2024/07/13 17:22 FOLDER_02
ディレクトリ: C:\Users\0905s\MY_WORK\PowerShell\SAMPLE01\FOLDER_01
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2024/07/13 17:21 0 FILE_01.txt
-a---- 2024/07/13 17:23 0 FILE_02.txt
ディレクトリ: C:\Users\0905s\MY_WORK\PowerShell\SAMPLE01\FOLDER_02
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2024/07/13 17:22 FOLDER_03
-a---- 2024/07/13 17:21 0 FILE_02.txt
ディレクトリ: C:\Users\0905s\MY_WORK\PowerShell\SAMPLE01\FOLDER_02\FOLDER_03
Mode LastWriteTime Length Name
---- ------------- ------ ----
-ar--- 2024/07/13 17:22 0 FILE_02.txt
-a---- 2024/07/13 17:22 0 FILE_03.txt
Modeについて。
スクロールできます
Mode | 意味 |
---|---|
d | ディレクトリ(フォルダ) |
a | アーカイブ(ファイル) |
r | 読み取り専用 |
h | 隠しファイル |
s | システムファイル |
読み取り専用( r )だけを取得。
Get-ChildItem -Path . -Recurse | %{ If( $_.IsReadOnly) { $_.Name }
実行結果。
FILE_02.txt
フルパスで取得する場合。
Get-ChildItem -Path . -Recurse | %{ If( $_.IsReadOnly) { $_.FullName }
実行結果。
C:\Users\0905s\MY_WORK\PowerShell\SAMPLE01\FOLDER_02\FOLDER_03\FILE_02.txt
| (パイプライン):
結果を次の処理に渡すための機能。PowerShellのパイプラインはデータがオブジェクト型で渡されるのが特徴。
% :
ForEach-Objectコマンドレットのエイリアス。
$_. (ドルアンダースコアどっと):
パイプラインを通じて取得したオブジェクトを参照するためのシェル変数。
パイプラインを通じて取得したオブジェクト型のデータを1件ずつ読み取り専用を判定し、Trueならファイル名を取得している。
PowerShellの2種類のForeach
- ForEach-ObjectコマンドレットのエイリアスとしてのForEach
- ForEach-Objectのエイリアスには、%、foreachという名前がある。
- ForEachステートメント
- 配列に格納されている値やオブジェクトを一つずつ処理するときに使用。
使用の判断はとりあえずパイプラインを使用するかどうか。(内部での処理がことなる)
※ステートメントのほうは、パイプでオブジェクトの受け取りができないため。
普通のプログラム風にForEachステートメントで実装。
# フォルダ移動
Set-Location C:\Users\0905s\MY_WORK\PowerShell\SAMPLE01
# 変数に格納
$results = Get-ChildItem -Path . -Recurse
# ForEachで取り出す
ForEach( $obj in $results)
{
if( $obj.IsReadOnly)
{
$obj.Name
}
}
実行結果。
FILE_02.txt
変数の型を見てみる。
# フォルダ移動
Set-Location C:\Users\0905s\MY_WORK\PowerShell\SAMPLE01
# 変数に格納
$results = Get-ChildItem -Path . -Recurse
# ForEachで取り出す
ForEach( $obj in $results)
{
if( $obj.IsReadOnly)
{
$obj.Name
}
}
# Write-Host $results.GetType()
Write-Host $results.GetType().FullName
# Write-Host $obj.getType()
Write-Host $obj.getType().FullName
実行結果。
FILE_02.txt
System.Object[]
System.IO.FileInfo
PowerShellのSystem.Object[]は、規定でテーブルとして書式設定されたカスタムオブジェクトのコレクション。
コメント