我有超过一百万个这样的文件:First_Last_MI_DOB_和更多信息。有没有办法我可以运行一个重命名脚本,可以从文件名中删除第一个,最后一个,Mi和DOB,但保留之后的东西?谢谢。
答案 0 :(得分:0)
根据我对这个问题的回答编辑:Parse and Switch Elements of Folder Names using Powershell
# Path to folder
$Path = '.\'
# Regex to match "ID_000000..."
$Regex = 'ID_\d+.*$'
# Get all objects in path
Get-ChildItem -Path $Path |
# Select only objects that are not directory and name matches regex
Where-Object {!$_.PSIsContainer -and $_.Name -match $Regex} |
# For each such object
ForEach-Object {
# Rename object
Rename-Item -Path $_.FullName -NewName $Matches[0]
}
更新#1:您似乎需要编写一个匹配名称所需部分的正则表达式,然后使用它来重命名文档。
假设文件名是x-John_Doe_._DOB_01-11-1990_M_ID_000000_TitleofDocument_DateofDocument_Docpagenumber_
,以下是几个例子:
(ID_\d+.*)$
- 将匹配ID_{ONE_OR_MORE_DIGITS}{ANY_CHARACTERS}
ID_000000_TitleofDocument_DateofDocument_Docpagenumber_
\d{4}_(M|F)_(.*)$
- 将匹配{4_DIGITS}_M_{or}_F_
并捕获捕获组中的所有内容。M
ID_000000_TitleofDocument_DateofDocument_Docpagenumber_
更新#2:
每个文件中的所有名称都是不同的,长的是不同的ID。 例如:
John_Doe_DOB_01/01/01_ID_000000
和下一个文件名 可能是:John_Smith_DOB_01/02/01_ID_100000
等等。我在想我 只想以字符串形式读取文件名,将其拆分为_ 然后从[4]和之后创建新文件名。在那儿 一种方法吗?
当然,你可以这样做,但我建议使用正则表达式方法,因为它适用于每个具有ID_0xxxx
字符串的文件名,无论如何。我用第一个正则表达式修改了我的初始示例,所以它应该适合你。
但如果您想尝试拆分方法,请按以下步骤操作:
# Path to folder
$Path = '.\'
# Filename separator
$Separator = '_'
# Get all objects in path
Get-ChildItem -Path $Path |
# Select only objects that are not directory and name matches regex
Where-Object {!$_.PSIsContainer} |
# For each such object
ForEach-Object {
# Generate new name
$NewName = ($_.Name -split $Separator | Select-Object -Skip 4) -join $Separator
# Rename object
Rename-Item -Path $_.FullName -NewName $NewName
}