【问题标题】:Powershell Remove Special Character(s) from FilenamesPowershell 从文件名中删除特殊字符
【发布时间】:2016-10-18 16:45:50
【问题描述】:

我正在寻找一种通过 powershell 脚本从文件名中删除几个特殊字符的方法。

我的文件名如下所示:

[报告]_first_day_of_month_01_(generated_by_powershell)_[repnbr1].txt

我一直在为删除 [] 和它们之间的所有内容、() 和它们之间的所有内容以及删除所有 _ 以及所需的结果是一个看起来像这样的文件名感到困惑:

每月的第一天 01.txt

到目前为止,我尝试了以下解决方案无济于事。我已经从文件所在的目录运行了其中的每一个。

Get-ChildItem -Path .\ -Filter *.mkv | %{
$Name = $_.Name
$NewName = $Name -Replace "(\s*)\(.*\)",''
$NewName2 = $NewName -Replace "[\s*]\[.*\]",''
$NewName3 = $NewName2 -Replace "_",' '
Rename-Item -Path $_ -NewName $NewName3
}

因为即使我尝试像这样一次做一组,它也不起作用:

Get-ChildItem -Path .\ -Filter *.mkv | %{
$Name = $_.Name
$NewName = $Name -Replace "(\s*)\(.*\)",''
Rename-Item -Path $_ -NewName $NewName
}

我认为我试图完成这项任务的方式存在固有缺陷。话虽如此,我更喜欢使用 Rename-Item cmdlet 而不是使用移动项解决方案。

【问题讨论】:

    标签: regex powershell special-characters character-replacement rename-item-cmdlet


    【解决方案1】:
    gci *.txt | Rename-Item -NewName {$_ -replace '_*(\[.*?\]|\(.*?\))_*' -replace '_+', ' '}
    

    重命名是一个匹配[text](text) 块的正则表达式,并将它们替换为空。括号和方括号需要在正则表达式中转义以匹配它们。它将它们与可选的前导或尾随下划线匹配以获得[Report]__[repnbr1],因为它会在名称的开头或结尾留下_,它们将成为前导/尾随空格,这很烦人。然后它将剩余的下划线替换为空格。

    查看这里的正则表达式:Regex101

    【讨论】:

    • 谢谢。我尝试了与此类似的解决方案,但成功有限,但这成功了 100%!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多