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 
+1

请编辑您的问题,以便代码具有适当的格式。 –

+0

@Bill_Stewart:完成!没有意识到哈希符号会使它变得粗体。谢谢 – Jonathan

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

$csv = Import-Csv .\FILES.CSV 

$csvexport = $null 

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

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

某些字符可能不需要进行转义,但没有伤害(据我所知)逃脱字符,即使它并不需要它,除非你想用它来一个特殊角色的目的,我们不是。