Powershell 从文件名中删除特殊字符
Powershell Remove Special Character(s) from Filenames
我正在寻找一种通过 powershell 脚本从文件名中删除几个特殊字符的方法。
我的文件名是这样的:
[报告]_first_day_of_month_01_(generated_by_powershell)_[repnbr1].txt
我一直对删除 [] 和它们之间的所有内容、() 和它们之间的所有内容以及删除所有 _'s 感到困惑,所需的结果是一个如下所示的文件名:
一个月的第一天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 而不是使用移动项目解决方案。
gci *.txt | Rename-Item -NewName {$_ -replace '_*(\[.*?\]|\(.*?\))_*' -replace '_+', ' '}
重命名是一个正则表达式,它匹配 [text]
或 (text)
块并将它们替换为空。圆括号和方括号需要在正则表达式中进行转义以按字面匹配它们。它将它们与可选的前导或尾随下划线匹配以获得 [Report]_
或 _[repnbr1]
因为它会在名称的开头或结尾留下 _
并且它们将变成 leading/trailing 空格,这很烦人。然后它将剩余的下划线替换为空格。
查看此处的正则表达式:Regex101
我正在寻找一种通过 powershell 脚本从文件名中删除几个特殊字符的方法。
我的文件名是这样的:
[报告]_first_day_of_month_01_(generated_by_powershell)_[repnbr1].txt
我一直对删除 [] 和它们之间的所有内容、() 和它们之间的所有内容以及删除所有 _'s 感到困惑,所需的结果是一个如下所示的文件名:
一个月的第一天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 而不是使用移动项目解决方案。
gci *.txt | Rename-Item -NewName {$_ -replace '_*(\[.*?\]|\(.*?\))_*' -replace '_+', ' '}
重命名是一个正则表达式,它匹配 [text]
或 (text)
块并将它们替换为空。圆括号和方括号需要在正则表达式中进行转义以按字面匹配它们。它将它们与可选的前导或尾随下划线匹配以获得 [Report]_
或 _[repnbr1]
因为它会在名称的开头或结尾留下 _
并且它们将变成 leading/trailing 空格,这很烦人。然后它将剩余的下划线替换为空格。
查看此处的正则表达式:Regex101