PowerShell:使用禁止字符列表过滤文件名列表
问题描述:
我有一个CSV文件,它使用Get-ChildItem构建的文件名列表。 现在我想采取该列表,并创建一个文件名称包含某些字符(“,|,',<等...)的项目列表PowerShell:使用禁止字符列表过滤文件名列表
我写了下面的脚本,运行良好;除了我我无法用过滤的文件?在文件名,我也想使它成为一个小更清洁,更简单。任何想法?
$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
答
使用正则表达式(简称正则表达式)匹配,而不是-like
比较运算符下面将尝试匹配您列出的任何字符,以及问号和双引号。前面的反斜杠是一个转义字符,确保它是一个字面匹配,并且每个字符之间的管道表示“或”,以便查找任何字符。
$csv = Import-Csv .\FILES.CSV
$csvexport = $null
$csvExport = $csv | select name,length |Where-Object {$_.name -match "\`"|\'|\%|\||\#|\:|\<|\>|\/|\\|\?"}
$csvexport | export-csv .\filesupdated.csv -NoTypeInformation -NoClobber
某些字符可能不需要进行转义,但没有伤害(据我所知)逃脱字符,即使它并不需要它,除非你想用它来一个特殊角色的目的,我们不是。
请编辑您的问题,以便代码具有适当的格式。 –
@Bill_Stewart:完成!没有意识到哈希符号会使它变得粗体。谢谢 – Jonathan