ことの背景
「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とか使いたいけど、現場のセキュリティレベルが高すぎて使えないのが現状。
この現場とはもう直ぐさよならなので、次の現場に期待したい。