[PowerShell] フォルダ内のファイル一覧を取得し、一括でファイル操作をおこなう。
Windows PowerShell を使ってフォルダ内のファイル一覧を取得し、一括でファイル操作をする方法について紹介します。
使用環境
- Windows 10
- Windows PowerShell 5.1
サンプルのフォルダ構成
C直下のtmpフォルダに拡張子の異なるファイルとフォルダが格納されており、フォルダ:SAMPLEの中にCSVファイルが3つ格納されているといったフォルダ構成となります。
フォルダ内のファイル一覧を取得
フォルダ内の情報を取得するには Get-ChildItem を使用します。使用方法について確認していきましょう。
カレントフォルダ内のファイルおよびフォルダの一覧を取得
PS C:\tmp> Get-ChildItem
上記のようにカレントフォルダに格納されているファイルおよびフォルダの一覧が表示されます。
カレントフォルダ内のファイルのみの一覧を取得
PS C:\tmp> Get-ChildItem -File
-File オプションを付与することで、ファイルのみを取得するようになります。 また、 -Directory オプションを付与した場合は、名のとおりディレクトリ(フォルダ)のみ取得するとなります。
サブフォルダ配下まで再帰的に取得する
PS C:\tmp> Get-ChildItem -Recurse
-Recurse オプションを付与することで、サブフォルダ配下に対して再帰的に処理します。
特定の拡張子に一致するファイルのみを取得する
PS C:\tmp> Get-ChildItem -Recurse -File -Include *.txt
-Include オプションでファイル名をワイルドカード(*)で指定し、拡張子の指定による絞り込みをします。
-Include オプションは -Include text*
といった記述をすると「testから始まる」という条件になりますので、ファイル名検索にも利用できます。
また、上記コマンドの -Include オプションを -Exclude オプションに変更すると、「拡張子txtのファイルを除く」という使い方ができます。
フォルダ内のファイルを利用し、一括処理を行う
複数のファイルを1つのファイルにまとめる
PS C:\tmp> Get-ChildItem -Recurse -File -Include *.csv | Get-Content | Set-Content merge.csv
上記の例はカレントフォルダ配下(サブフォルダも含む)に存在するCSVファイル(拡張子がcsv)を1つのファイルにまとめるという内容になります。
複数のファイルを一括で別のフォルダに移動する
PS C:\tmp> Get-ChildItem -Recurse -File -Include *.xlsx | ForEach-Object { Move-Item $_ C:\tmp\SAMPLE }
上記の例はカレントフォルダ配下(サブフォルダも含む)に存在するExcelファイル(拡張子がxlsx)を指定のフォルダ移動するという内容になります。 また、 Move-Item の代わりに Copy-Item にすることで、ファイルのコピーになります。
Get-ChildItem の取得結果をパイプラインで連結することで、さまざまな一括処理が可能となります。
本ブログにも Get-ChildItem を利用した一括処理の記事がいくつかあるので、参考にしてください。
それでは、また。