PowerShell:使用禁用字符列表筛选文件名列表

时间:2017-03-08 18:51:19

标签: powershell

我有一个CSV,其中包含我使用Get-ChildItem构建的文件名列表。 现在我想获取该列表并创建一个包含某些字符的文件名列表(“,|,',<,etc ...)

我写了以下脚本,效果很好;除了我无法用?过滤文件?在文件名中。我还想让它更清洁,更直接。有什么想法吗?

$csv = Import-Csv .\FILES.CSV

$csvexport = $null

$csvExport = $csvexport + ($csv | select name,length |Where-Object {$_.name -like "*'*"})
$csvExport = $csvexport + ($csv | select name,length |Where-Object {$_.name -like "*%*"})
$csvExport = $csvexport + ($csv | select name,length |Where-Object {$_.name -like "*|*"})
$csvExport = $csvexport + ($csv | select name,length |Where-Object {$_.name -like "*#*"})
$csvExport = $csvexport + ($csv | select name,length |Where-Object {$_.name -like "*:*"})
$csvExport = $csvexport + ($csv | select name,length |Where-Object {$_.name -like "*<*"})
$csvExport = $csvexport + ($csv | select name,length |Where-Object {$_.name -like "*>*"})

$csvExport = $csvexport + ($csv | select name,length |Where-Object {$_.name -like "*/*"})
$csvExport = $csvexport + ($csv | select name,length |Where-Object {$_.name -like "*\*"})

$csvexport | export-csv .\filesupdated.csv -NoTypeInformation -NoClobber

1 个答案:

答案 0 :(得分:2)

使用RegEx(正则表达式的缩写)匹配而不是-like比较运算符。以下内容将尝试匹配您列出的任何字符,以及问号和双引号。前面的反斜杠是一个转义字符,以确保它是一个文字匹配,并且每个字符之间的管道表示'或',以便它查找任何字符。

$csv = Import-Csv .\FILES.CSV

$csvexport = $null

$csvExport = $csv | select name,length |Where-Object {$_.name -match "\`"|\'|\%|\||\#|\:|\<|\>|\/|\\|\?"}

$csvexport | export-csv .\filesupdated.csv -NoTypeInformation -NoClobber

有些角色可能不需要被转义,但是即使它不需要它也没有伤害(我知道)转义角色,除非你试图将它用于特殊角色的目的,我们不是。