我正在尝试过滤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
等