2017-02-11 71 views
3

在個人文件夾中,存在有關由人員主管創建的員工輔導的文件。這些文件的命名慣例總是應該像將文件重命名爲標準

Supervisorname.SXXEXX.NameOfIssue.doc 

所以擊穿進一步:

  • Supervisorname =鮑勃·戈弗雷
  • 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 
+0

結束錨定如果我沒有記錯的 - 不應該的例子線有SXX和EXX之間的點? – LotPings

+0

@LotPings - 不,SXX和EXX之間不應該有點。 – BellHopByDayAmetuerCoderByNigh

回答

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,無 - 或至少有一個字符,懶惰
  2. 組分頻器(\.| | X | -)任一個點或空間或x-
  3. 組規定數(S\d{2}) S和2位(也許後面跟着一個點)\.*
  4. 組僱員號碼(E\d{2,3}) E和兩個或三個數字
  5. 組分頻器(\.| -)無論是點或-
  6. 組問題([^\.]+) neg.class一切,但一個點至少一個字符
  7. 魯汶他擴展(\.doc)在該行$
+0

如何添加此語法的路徑? – BellHopByDayAmetuerCoderByNigh

+0

@BellHopByDayAmetuerCoderBy你可以在'Set-Location'之前使用'Pushd',但是我包含你的原始命令。 – LotPings

1

使用正則表達式替換到圍繞着文件名的約定/員工數部分的比賽:

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

我認爲這將不符合規定編號前的單個空格。 – LotPings

+0

如何添加此語法的路徑? – BellHopByDayAmetuerCoderByNigh

+1

@LotPings你說得對。我忘了讓非捕捉組可選。固定。 –