重命名文件以符合标准
Rename Files To Fit Standard
在人事文件夹中,有关于由人事主管创建的员工辅导文件。这些文件的命名约定 ALWAYS 应该像
Supervisorname.SXXEXX.NameOfIssue.doc
所以进一步细分:
- 主管姓名 = Bob Godfrey
- SXX = 规定号码(始终为 2 位数字,范围为 01 - 99,但并非所有号码都使用)
- EXX = 员工编号(始终为 2 位数字,我们还没有达到需要移动到 3 位数字或 E 以外的差异前缀的地步....)
所以示例名称是 Bob Godfrey.S48E99.Issue With Blue.doc
- 然而,由于一些主管没有遵守规则,所以有些文件没有 .
分隔符,我们的文件看起来像
Bob Godfrey - S48E99 - Issue With Blue.doc
Bob Godfrey X S48E99 - Issue With Blue.doc
Bob Godfrey S48E99 - Issue With Blue.doc
为了规范化的目的,(并且为了我不要在这个过程中拉扯我的头发)我现在尝试使用下面的语法来获取这些异常值并重命名它们(大约有 300 个),而这似乎执行为应该,文件没有重命名。
我需要更改什么才能相应地重命名这些文件?
Get-ChildItem -Path R:\Personnel\ -Filter *.doc |
Rename-Item -NewName { $_.BaseName.Replace(" - ", ".") + $_.Extension } -Verbose
Get-ChildItem -Path R:\Personnel\ -Filter *.doc |
Rename-Item -NewName { $_.BaseName.Replace(" X ", ".") + $_.Extension } -Verbose
使用正则表达式替换将您的匹配集中在文件名的 stipulation/employee 数字部分:
Rename-Item -NewName { $_.Name -replace ' (?:[-X] )?(S\d\dE\d\d)(?: [-X])? ', '..' }
$Pattern=[RegEx]'^([^-.]+?)(\.| | X | - )(S\d{2})\.*(E\d{2,3})(\.| - )([^\.]+)(\.doc)$'
$Replace='...'
GCI -Path R:\Personnel\ -Filter *.doc | Rename-Item -NewName { $_.Name -replace $Pattern,$Replace}
$Pattern
有7组
- 主管组
([^-.]+?)
neg.class,不 - 或至少一个字符,惰性
- 分隔符组
(\.| | X | - )
点或 space 或 x
或 -
- 规定编号组
(S\d{2})
S 和 2 位数字(可能后跟一个点)\.*
- 集团员工编号
(E\d{2,3})
E和两位或三位数字
- 组分隔符
(\.| - )
点或 -
- 组问题
([^\.]+)
neg.class 除点外的所有内容至少一个字符
- 将锚定在行尾的
(\.doc)
分组 $
在人事文件夹中,有关于由人事主管创建的员工辅导文件。这些文件的命名约定 ALWAYS 应该像
Supervisorname.SXXEXX.NameOfIssue.doc
所以进一步细分:
- 主管姓名 = Bob Godfrey
- SXX = 规定号码(始终为 2 位数字,范围为 01 - 99,但并非所有号码都使用)
- EXX = 员工编号(始终为 2 位数字,我们还没有达到需要移动到 3 位数字或 E 以外的差异前缀的地步....)
所以示例名称是 Bob Godfrey.S48E99.Issue With Blue.doc
- 然而,由于一些主管没有遵守规则,所以有些文件没有 .
分隔符,我们的文件看起来像
Bob Godfrey - S48E99 - Issue With Blue.doc
Bob Godfrey X S48E99 - Issue With Blue.doc
Bob Godfrey S48E99 - Issue With Blue.doc
为了规范化的目的,(并且为了我不要在这个过程中拉扯我的头发)我现在尝试使用下面的语法来获取这些异常值并重命名它们(大约有 300 个),而这似乎执行为应该,文件没有重命名。
我需要更改什么才能相应地重命名这些文件?
Get-ChildItem -Path R:\Personnel\ -Filter *.doc |
Rename-Item -NewName { $_.BaseName.Replace(" - ", ".") + $_.Extension } -Verbose
Get-ChildItem -Path R:\Personnel\ -Filter *.doc |
Rename-Item -NewName { $_.BaseName.Replace(" X ", ".") + $_.Extension } -Verbose
使用正则表达式替换将您的匹配集中在文件名的 stipulation/employee 数字部分:
Rename-Item -NewName { $_.Name -replace ' (?:[-X] )?(S\d\dE\d\d)(?: [-X])? ', '..' }
$Pattern=[RegEx]'^([^-.]+?)(\.| | X | - )(S\d{2})\.*(E\d{2,3})(\.| - )([^\.]+)(\.doc)$'
$Replace='...'
GCI -Path R:\Personnel\ -Filter *.doc | Rename-Item -NewName { $_.Name -replace $Pattern,$Replace}
$Pattern
有7组
- 主管组
([^-.]+?)
neg.class,不 - 或至少一个字符,惰性 - 分隔符组
(\.| | X | - )
点或 space 或x
或-
- 规定编号组
(S\d{2})
S 和 2 位数字(可能后跟一个点)\.*
- 集团员工编号
(E\d{2,3})
E和两位或三位数字 - 组分隔符
(\.| - )
点或-
- 组问题
([^\.]+)
neg.class 除点外的所有内容至少一个字符 - 将锚定在行尾的
(\.doc)
分组$