powershellを利用して、あるフォルダ配下に特定の文字列を含むファイルがある場合、それらのファイルを一覧として取得してみました。
特定の文字列を含むファイルを一覧取得する方法
以下のコマンドを利用して、
「C:\hogehoge\」フォルダの中に「hoge」という文字列が含まれるファイルをすべて取得します。
$path = "C:\hogehoge\*hoge*"
if(Test-Path $path){
$file_list = get-childitem $path
for ($i=0; $i -lt $file_list.count; $i++){
write-host $file_list[$i].name
}
}else{
write-host "There is no file with such a name"
}
コマンドの解説
$path = "C:\hogehoge\*hoge*"
↑1行目は、フォルダと一覧取得したい文字列を*(アスタリスク)で囲んで変数に格納します。
if(Test-Path $path){
2行目では、「Test-Path」で1行目で定義したファイルが存在するかどうかを判定し、その結果をif文の判定結果に利用します。 ※「Test-Path」の返り値は「True」or「False」となります。
「Test-Path」が「True」=ファイルが存在する場合、3~6行目の処理を実施します。
$file_list = get-childitem $path
3行目で「get-childitem」を利用して、1行目の定義に該当するファイルを一覧として取得します。
for ($i=0; $i -lt $file_list.count; $i++){
write-host $file_list[$i].name
}
4~6行目では、3行目で取得したファイル一覧をすべて出力させます。
}else{
write-host "There is no file with such a name"
}
7~9行目は、「Test-Path」が「False」=ファイルが存在しない場合に、”There is no file with such a name” と表示させます。
コマンド実行結果
「C:\hogehoge\」フォルダには4つのファイルを用意しました。
そのうえで上記のコマンドを実行してみると、
“hoge” という文字列を含む2つのファイルが取得できました。
[参考] Get-ChildItem のエイリアスは「gci」「ls」「dir」
「Get-ChildItem」はエイリアスとして「gci」「ls」「dir」が登録されているので、上記で紹介したコマンドをこれらのエイリアスに書き換えても同じ結果となります。
エイリアスで入力するほうが楽です。