CSVファイルをフィルタリングしようとしています。しかし、次のスクリプトはエラーを出します。各Stringオブジェクトでmatchを実行するように指定するにはどうすればよいですか?
いろいろ組み合わせてみましたが、結果が出ませんでした。
$FileNames = [System.IO.Directory]::GetFiles("C:\Users\anagre\Desktop")
$FileNames = $FileNames | Where { -match "*.csv"}
CSVファイルをフィルタリングしようとしています。しかし、次のスクリプトはエラーを出します。各Stringオブジェクトでmatchを実行するように指定するにはどうすればよいですか?
いろいろ組み合わせてみましたが、結果が出ませんでした。
$FileNames = [System.IO.Directory]::GetFiles("C:\Users\anagre\Desktop")
$FileNames = $FileNames | Where { -match "*.csv"}
これを試して:
$FileNames = Get-ChildItem -Path "C:\Users\anagre\Desktop" -Filter *.csv
where
上記のコードでは、句で$ PSItem($ _)を使用していません。ワイルドチャーを使用する場合は、-like
演算子を使用する必要があります。
$FileNames|where{$_ -like "*.csv"}
また
$FileNames|where{$_ -match ".csv"}
-match演算子は、入力オブジェクトに応じて、比較演算子と配列演算子の両方になります。
スカラーの場合、ブール値を返します。配列の場合、パターンに一致する配列のすべての要素を返します
@($Filenames) -match '*.csv'
配列構文を使用して、によって返されるファイル名が1つしかない場合でも配列を取得できるようにしますGet-ChildItem
。$True
それ以外の場合は、一致する場合はファイル名の代わりに返されます。
私がこれを行うために見つけた最も簡単な(そして最もきちんとした)方法は次のとおりでした:
$filename.where{$_ -match '.csv'}
または、ハッシュテーブルの特定の列内でのみ検索する
$filename.where{$_.location -match '.csv'}
次に、必要なビットだけを取得します
$filename.where{$_.location -match '.csv'} | select User,Filename,Filetype
等