Powershell 重命名文件以符合标准
在人事文件夹中,有人事主管创建的有关员工辅导的文件。这些文件的命名约定应始终为Powershell 重命名文件以符合标准,powershell,powershell-4.0,Powershell,Powershell 4.0,在人事文件夹中,有人事主管创建的有关员工辅导的文件。这些文件的命名约定应始终为 Supervisorname.SXXEXX.NameOfIssue.doc 因此,进一步细分如下: Supervisorname=Bob Godfrey SXX=规定编号(始终为2位,范围为01-99,但并非所有数字都使用) EXX=员工编号(始终为2位数,我们还没有达到需要移动到3位数或除E以外的差异前缀的程度…) 因此,示例名称应为Bob Godfrey.S48E99.Issue With Blue.doc
Supervisorname.SXXEXX.NameOfIssue.doc
因此,进一步细分如下:
- Supervisorname=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
使用正则表达式替换以文件名的约定/员工编号部分为中心进行匹配:
Rename-Item -NewName { $_.Name -replace ' (?:[-X] )?(S\d\dE\d\d)(?: [-X])? ', '.$1.' }
$Pattern
有7个组
([^-.]+?)
neg.class,无或点至少一个字符,惰性(\.| X |-)
的分组可以是点或空格,也可以是X
或-
(S\d{2})
S和2位数字(可能后跟一个点)\.*
(E\d{2,3})
E和两位或三位数字(\.\124;-)
一个点或-
([^\.]+)
neg.class除点以外的所有内容至少一个字符(\.doc)
分组$
如果我没弄错的话-示例行中的SXX和EXX之间不应该有点吗?@LotPings-不应该在SXX和EXX之间有点。我认为这与规定编号前面的单个空格不匹配。我如何将路径添加到此语法中?@LotPings您是对的。我忘了将非捕获组设为可选组。修正了。@bellhopbayametuercoderbynigh您没有。为什么要这样做?我如何为该语法添加路径?@BellHopByDayAmetuerCoderByNigh您可以事先
设置位置
或使用Pushd
,但我包含了您的原始命令。
$Pattern=[RegEx]'^([^-.]+?)(\.| | X | - )(S\d{2})\.*(E\d{2,3})(\.| - )([^\.]+)(\.doc)$'
$Replace='$1.$3.$4.$6$7'
GCI -Path R:\Personnel\ -Filter *.doc | Rename-Item -NewName { $_.Name -replace $Pattern,$Replace}