我有一个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
答案 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
有些角色可能不需要被转义,但是即使它不需要它也没有伤害(我知道)转义角色,除非你试图将它用于特殊角色的目的,我们不是。