PowerShell: ファイル一覧を取得(フルパス・ファイル名のみ)

PowerShellでファイルの一覧を取得する場合、 Get-ChildItemコマンドレットを使います。 取得対象のフォルダを指定するだけです。 ファイルのみを取得する場合は-Fileオプションを指定、 フォルダ(コンテナ)のみを取得する場合は-Directoryオプションを指定します。 Get-ChildItemコマンドでフォルダを指定した場合はFileInfoオブジェクトが 戻り値となります。

Get-ChildItemコマンドの使用例

次のコードは「D:\temp」フォルダ内にあるファイル一覧を取得します。

$items = Get-ChildItem d:\temp -File

foreach ($item in $items) {
	$item
}


# 実行結果
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          2022/02/06     4:24              0 test1.txt
-a---          2022/02/05     3:59              0 test2.txt
-a---          2022/02/12    12:04              0 test3.ini

$itemsには複数のファイル情報が格納されるため、 foreach文でループして個々の値を取得します。

実行結果をみてわかるように、Get-ChildItemコマンドの戻り値は FileInfoオブジェクトです。 オブジェクトのプロパティを指定することでファイル名のみフルパスなどの 必要な情報を取得できます。

「フルパス」を取得

フルパスを取得するにはFullNameプロパティを指定します。

$items = Get-ChildItem d:\temp -File

foreach ($item in $items) {
	$item.FullName
}

# 実行結果
D:\temp\test1.txt
D:\temp\test2.txt
D:\temp\test3.ini

「ファイル名のみ」を取得

ファイル名のみを取得するにはNameプロパティを指定します。

$items = Get-ChildItem d:\temp -File

foreach ($item in $items) {
	$item.Name
}

# 実行結果
test1.txt
test2.txt
test3.ini

ファイル一覧からファイルの更新時刻を取得

ファイルの更新時刻を取得するにはLastWriteTimeプロパティを指定します。

$items = Get-ChildItem d:\temp -File

foreach ($item in $items) {
	$item.LastWriteTime
}

# 実行結果
2022年2月6日 4:24:27
2022年2月5日 3:59:51
2022年2月12日 12:04:32

取得するファイルの種類を指定

Get-ChildItemで取得するファイルの種類を限定(指定)するには ワイルドカーをを使います。 「*.txt」とすると拡張子が.txtのファイルのみを取得します。

# *.txtに限定
$items = Get-ChildItem d:\temp\*.txt -File

再帰的に取得

サブフォルダも含めて再帰的に取得する場合は -Recurseオプションを指定します。
次のコードはD:\tempフォルダにあるファイルやフォルダを 再帰的に取得します。

$items = Get-ChildItem d:\temp -Recurse
PowerShell