重命名文件以符合标准

时间:2017-02-11 11:33:03

标签: powershell powershell-v4.0

在人事档案夹中,有关于由人员主管创建的员工辅导的文件。这些文件的命名约定总是应该像

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

2 个答案:

答案 0 :(得分:1)

使用正则表达式替换将匹配集中在文件名的规定/员工编号部分:

Rename-Item -NewName { $_.Name -replace ' (?:[-X] )?(S\d\dE\d\d)(?: [-X])? ', '.$1.' }

答案 1 :(得分:0)

$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}

$Pattern有7个小组

  1. 主管组([^-.]+?) neg.class,no - 或点至少一个char,lazy
  2. 分隔符(\.| | X | - )的分组或点或空格或x-
  3. 规定编号为(S\d{2})的组和2位数(可能后跟一个点)\.*
  4. 组员工编号(E\d{2,3}) E和两位或三位数
  5. 将分隔符(\.| - )分组为点或-
  6. group issue ([^\.]+) neg.class除了一个点至少有一个char
  7. 之外的所有内容
  8. 将分机(\.doc)分组到$
  9. 行的末尾