我正在尝试过滤CSV文件。但是以下脚本发出错误。如何指定我想在每个String对象上运行匹配?
我尝试了各种组合,但没有结果。
$FileNames = [System.IO.Directory]::GetFiles("C:\Users\anagre\Desktop")
$FileNames = $FileNames | Where { -match "*.csv"}
答案 0 :(得分:17)
试试这个:
$FileNames = Get-ChildItem -Path "C:\Users\anagre\Desktop" -Filter *.csv
在上面的代码中,你没有在where
子句中使用$ PSItem($ _),如果你想使用wildchar,你必须使用-like
运算符:< / p>
$FileNames|where{$_ -like "*.csv"}
或
$FileNames|where{$_ -match ".csv"}
答案 1 :(得分:7)
-match运算符既是比较运算符又是数组运算符,具体取决于其输入对象。
如果是标量,则返回布尔值。如果它是一个数组,它将返回与模式
匹配的数组的所有元素@($Filenames) -match '*.csv'
如果Get-ChildItem
只返回一个文件名,请使用数组语法确保仍然获得数组。否则,如果匹配,您将返回$True
而不是文件名。
答案 2 :(得分:1)
我发现最简单(也是最简洁)的方法如下:
$filename.where{$_ -match '.csv'}
或仅在哈希表的给定列中搜索
$filename.where{$_.location -match '.csv'}
然后只得到您需要的位
$filename.where{$_.location -match '.csv'} | select User,Filename,Filetype
等