エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

PowerShellで特定ファイルの一覧を取得方法

ことの背景

DOSでファイルの一覧取得したいんですけど、どうすればできますか?」みたいな質問を受けた。
PowerShellならできるで!」って返したけど、即作れなかったので、メモ。
ちなみに、エセ関西弁で喋ってはいない。
なんか知らんけど、軽いノリの文章を書くと、不思議とエセ関西弁が出て来る。

PowerShellで特定ファイルの一覧を取得方法

テスト環境

業務のフォルダ構成を乗せるわけにはいかんので、とりあえずテスト用の環境を作った。
テストのフォルダ構成は、以下。

test
│  e.bat
│  f.txt
│  test.txt
│  
└─sub
        a.txt
        b.java
        c.java
        d.bat

PowerShellの紹介だが、treeコマンドで出したのはご愛嬌。。。

コマンド

下記コマンドを実行。
今回は、".txt"のファイルのみ抽出。

Get-ChildItem ./ -Recurse | Where-Object{$_.Name -like "*.txt"} | Select-Object Name

すると、結果は以下の通り。

Name
----
f.txt
test.txt
a.txt

コマンドの説明

Get-ChildItemで、ファイルの一覧を取得。
-Recurseでサブディレクトリも取得させる。
あとは、パイプラインで繋げて、Where-Objectで必要なものだけ抽出、Select-Objectで必要な要素を出力している。

PowerShellの魅力

DOSだと、面倒な繰り返し処理を書かなければいけないが、PowerShellなら簡単に実装できる。
JavaのStreamAPIを使う感覚に近い。
基本的には、何かオブジェクトを作る→データの加工→出力処理 を書けば見やすい。
なるべく簡潔に実装することが重要だと思う。
最初、DOSに慣れているせいか、とっつきにくさを感じるかもしれない。
ただ、基本的な文法を覚えてしまうと、あまり苦にならないので、Windows7以降を使っているなら、なるはやで覚えたほうがいいと思う。

よくCSVファイルの中身を見たいときにPowerShellを使って見たりする。
意外と簡単にできる。
本当は、Pythonとか使いたいけど、現場のセキュリティレベルが高すぎて使えないのが現状。
この現場とはもう直ぐさよならなので、次の現場に期待したい。