我正在尝试过滤 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'
使用数组语法确保在Get-ChildItem
. $True
否则,如果匹配,您将返回而不是文件名。
我发现这样做的最简单(也是最整洁)的方法如下:
$filename.where{$_ -match '.csv'}
或仅在哈希表的给定列内搜索
$filename.where{$_.location -match '.csv'}
然后得到你需要的位
$filename.where{$_.location -match '.csv'} | select User,Filename,Filetype
ETC