如何使用 'Match' cmdlet 筛选 PowerShell 中的字符串数组(或列表)?



我正在尝试过滤CSV文件。但是下面的脚本给出了一个错误。我如何指定我想在每个String对象上运行match ?

我尝试了各种组合,但没有结果。

$FileNames = [System.IO.Directory]::GetFiles("C:UsersanagreDesktop")
$FileNames = $FileNames | Where { -match "*.csv"}

试试这个:

$FileNames = Get-ChildItem -Path "C:UsersanagreDesktop" -Filter *.csv

在上面的代码中,您没有在where子句中使用$PSItem($_),如果您想使用通配符,则必须使用-like操作符:

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

$FileNames|where{$_ -match ".csv"}

-match操作符既是比较操作符又是数组操作符,具体取决于其输入对象。

如果是标量,则返回布尔值。如果它是一个数组,它返回数组中与

模式匹配的所有元素。
@($Filenames) -match '*.csv'

使用数组语法,以确保你仍然得到一个数组,如果只有一个文件名由Get-ChildItem返回。否则,如果匹配,您将返回$True而不是文件名。

我发现最简单(也是最整洁)的方法如下:

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

或仅在哈希表

的给定列内搜索
$filename.where{$_.location -match '.csv'}

然后得到你需要的比特

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

最新更新