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