Tips

【PowerShell】フォルダ配下のファイルのリストを取得する方法【Get-ChildItem】

かなむ

PowerShellのGet-ChildItemコマンドレットを用いて「特定のフォルダ配下にあるファイルのリストを取得する方法」を紹介します。

結論:下記のコードで実施します。

①フォルダ直下のファイル一覧を取得する

Get-ChildItem -Path "FOLDER_PATH" -File

②ファイル配下(サブフォルダ含む)のファイル一覧を取得する

Get-ChildItem -Path "FOLDER_PATH" -Recurse -File

「FOLDER_PATH」を任意のフォルダパスに置換してください

取得したファイル1つ1つに対して処理をしたい場合は、変数に格納してforeachでループします。

1# ファイルのリストを変数 $folderFileList に設定
2$folderFileList = Get-ChildItem -Path "FOLDER_PATH" -File
3
4#取得したファイルリストをループ($item変数に設定)
5foreach($item in $folderFileList)
6{
7  # $item(ファイル毎)に関する処理
8}

以下、コードの解説です。(公式リファレンスはこちら

子項目を取得する「Get-ChildItem」コマンドレット

PoerShellのGet-ChildItemコマンドレットは、指定したフォルダ配下のフォルダやファイルを取得することができます。

例えば、下記のような構成でファイルやフォルダが配置されている場合を見てみます。

フォルダ構成図

このとき、コマンドレットを実行したときの出力は下記のようになります。

1PS C:\Users\user> Get-ChildItem "E:\test"
2
3
4    ディレクトリ: E:\test
5
6
7Mode                 LastWriteTime         Length Name
8----                 -------------         ------ ----
9d-----        2023/08/11      7:31                フォルダ1
10-a----        2023/08/08     23:34              0 ファイル1.txt
11-a----        2023/08/08     23:35              0 ファイル2.bmp
12-a----        2023/08/08     23:35           8860 ファイル3.xlsx
13-a----        2023/08/08     23:35             22 ファイル4.zip

デフォルトではMode(属性)、LastWriteTime(更新日時)、Length(ファイルサイズ)、Name(名前)が出力されます。なお、Modeで出力される英字が意味するのは下記のとおりです。

Modeプロパティの意味
  • l (リンク)
  • d (ディレクトリ)
  • a (アーカイブ)
  • r (読み取り専用)
  • h (非表示)
  • s (システム)

「Get-ChilItem」コマンドレットのオプション

Get-ChildItemコマンドレットはいくつかの特定のパラメータを指定することで、様々なオプションを付与できます。ここではよく使うものをいくつか紹介します。

パラメータできること使用例
Path対象フォルダを指定するGet-ChildItem -Path C:\test
Name名前のみ取得するGet-ChildItem -Path C:\test -Name
Recurseサブフォルダまで対象にするGet-ChildItem -Path C:\Test -Recurse
Depth走査する階層を指定するGet-ChildItem -Path C:\Test -Depth 2
Include名前に含む文字列を指定するGet-ChildItem -Path C:\test* -Include *.txt
Exclude名前に含まない文字列を指定するGet-ChildItem -Path C:\test* -Exclude *.log
Fileファイルのみ取得するGet-ChildItem -Path C:\test -File
Directoryフォルダのみ取得するGet-ChildItem -Path C:\test -Directory
Get-ChildItemのよく使うパラメータ

例えば、冒頭の例では「File」や「Recurse」を使用して、取得対象をファイルだけに絞ったり、再帰処理でサブフォルダまで走査したりさせています。

各パラメータは、制約が設けられている場合もある(「Include」を使うときはPathにワイルドカードを指定する 等)ので、上手く動かない場合は公式リファレンスで確認することをお勧めします。

「Get-ChilItem」コマンドレットの使用例

ここでは、Get-ChildItemコマンドレットを使って、こんな処理を作ってみます。

作ってみる

「E:\test」配下(サブフォルダ含む)にあるすべてのファイル名のリストを表示する

実行するのはこんなコードです。

Get-ChildItem -Path E:\test -File -Recurse -Name

対象フォルダであるE:\testは、「Path」パラメータの引数として渡します。取得したいのはファイルのみのため「File」パラメータを指定。サブフォルダがある場合はその中身まで走査したいので「Recurse」も指定します。今回必要なのはファイル名のみなので「Name」パラメータも指定しておきました。実行結果は下記のとおりです。

1PS C:\Users\user> Get-ChildItem -Path E:\test -File -Recurse -Name
2Excelファイル.xlsx
3zipファイル.zip
4テキストファイル.txt
5テキストファイル2.txt
6テキストファイル3.txt
7テキストファイル4.txt
8テキストファイル5.txt
9画像ファイル.bmp
10子フォルダ\子テキストファイル.txt
11子フォルダ\子テキストファイル2.txt
12子フォルダ\孫フォルダ\孫テキストファイル.txt
13子フォルダ\孫フォルダ\孫テキストファイル2.txt
14子フォルダ\孫フォルダ\孫テキストファイル3.txt
かなむ
かなむ

取得したファイルに対して処理をしたい場合は、こちらで説明したとおりforeachループを使用します。

まとめ

PowershellのGet-ChildItemコマンドレットを使って特定フォルダ配下のファイルを取得する方法を紹介しました。

本ページの内容を組み込めば、

  • ファイルの一覧を作成する
  • ファイルのプロパティ(作成日時や更新日時)を一括で書き換える
  • ファイルの名称をルールに従って変更する

などの処理を作れるようになります。

かなむ
かなむ

WindowsのPCではすぐに作って使えるところがPowerShellの良いところですね。

ABOUT ME
かなむ
かなむ
現役SE。javaとc#とpythonとvbの経験あり。アプリ開発メイン。インフラ、特にネットワークは苦手。2児の父。好きな寿司ネタは「鯛」。将来は離島に別荘を構えたい。
記事URLをコピーしました