由于某些文件名包含Em破折号,因此我无法压缩大量文件。如here所述,我一直在尝试使用PowerShell脚本示例将En破折号(0x2014)替换为En破折号(0x2013),但在Windows 7环境中它似乎不适用于我。也就是说,PowerShell脚本似乎无法识别文件名中存在Em破折号。
例如以下文件名中的所有 – ...
XXXXX – DMP – [版本] – 部分执行[最新签名日期]
...未转换为破折号。
...但仅保留“ – ”。
我提供了以下脚本,并且正在使用PowerShell版本5.1。 任何帮助表示赞赏
function Replace-Text
{param(
[Parameter(Mandatory=$true)]
$text,
$em = ([char]0x2014),
$replacementlist = "$em,-,-,-,',,%,,$,,@,,#,,&,,’,"
)
Invoke-Expression ('$text' + -join $(
foreach($e in $replacementlist.Split(',')) {
'.Replace("{0}","{1}")' -f $e, $(
[void]$foreach.MoveNext()
$foreach.Current)
}
)
)
}
Get-ChildItem -Path $path | Rename-Item -NewName {(Replace-Text$_.Name).trim()}
答案 0 :(得分:1)
正如TessellatingHeckler所指出的那样,它是en
而不是em
破折号。
我建议将-replace
regex运算符与\p{Pd}
unicode类一起使用(Pd =“ P 破损, d 灰”) ,它将与破折号类型和常规连字符匹配。您的替换清单也可以大大简化:
$Replacements = @{
"[\p{Pd}]" = "-"
"[$([regex]::Escape("'%$@#&’"))]" = ""
}
foreach($ReplacePattern in $Replacements.Keys){
$text = $text -replace $ReplacePattern,$Replacements[$ReplacePattern]
}
return $text