[英]PowerShell: Filter list of file names using list of forbidden characters
我有一個CSV文件,其中包含使用Get-ChildItem構建的文件名列表。 現在,我要獲取該列表,並創建一個文件列表,其中文件名包含某些字符(“,|,',<等...)
我寫了下面的腳本,效果很好; 除非我無法使用?過濾文件? 在文件名中。 我還想使其更簡潔,更直接。 有任何想法嗎?
$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
使用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
某些字符可能不需要轉義,但是即使不需要字符,轉義字符也不會造成傷害(我知道),除非您嘗試將其用於特殊字符目的,我們不是。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.