21

CSVファイルをフィルタリングしようとしています。しかし、次のスクリプトはエラーを出します。各Stringオブジェクトでmatchを実行するように指定するにはどうすればよいですか?

いろいろ組み合わせてみましたが、結果が出ませんでした。

$FileNames = [System.IO.Directory]::GetFiles("C:\Users\anagre\Desktop")

$FileNames = $FileNames | Where { -match "*.csv"}
4

3 に答える 3

31

これを試して:

$FileNames = Get-ChildItem -Path "C:\Users\anagre\Desktop" -Filter *.csv

where上記のコードでは、句で$ PSItem($ _)を使用していません。ワイルドチャーを使用する場合は、-like演算子を使用する必要があります。

$FileNames|where{$_ -like "*.csv"}

また

$FileNames|where{$_ -match ".csv"}
于 2013-01-05T14:40:27.613 に答える
23

-match演算子は、入力オブジェクトに応じて、比較演算子と配列演算子の両方になります。

スカラーの場合、ブール値を返します。配列の場合、パターンに一致する配列のすべての要素を返します

@($Filenames) -match '*.csv'

配列構文を使用して、によって返されるファイル名が1つしかない場合でも配列を取得できるようにしますGet-ChildItem$Trueそれ以外の場合は、一致する場合はファイル名の代わりに返されます。

于 2013-01-05T18:41:27.903 に答える
10

私がこれを行うために見つけた最も簡単な(そして最もきちんとした)方法は次のとおりでした:

$filename.where{$_ -match '.csv'}

または、ハッシュテーブルの特定の列内でのみ検索する

$filename.where{$_.location -match '.csv'}

次に、必要なビットだけを取得します

$filename.where{$_.location -match '.csv'} | select User,Filename,Filetype

于 2019-10-14T10:47:02.807 に答える