2017-09-05 57 views
0

我有一組文件夾需要在其命名約定中進行標準化。Powershell批處理文件夾重命名 - 項目 - 限制長度和標準化

目前的文件夾命名爲這樣:

12345 - 項目1長的名字很長的名字很長的名字很長很長的名字

1245346項目2長文件名過長的名字太長

1247工程3名到這裏

我目前使用這個腳本:

Get-ChildItem -LiteralPath $Path -Directory | 
ForEach-Object { 
    $_.Name | Out-File "$($_.FullName)\$($_.Name).txt" -Force 
    Rename-Item -LiteralPath $_.FullName -NewName ($_.Name -replace '^(\d+).*$', '$1') 
} 

該腳本正確地將做到以下幾點:

  1. 寫在每個文件夾中的文本文件與文件夾
  2. 的當前名稱重命名文件夾只保留數字

我喜歡它,以便腳本可以做到這一點:

  1. 寫在每個文件夾中的文本文件與文件夾
  2. 的當前名稱的文件夾重命名爲標準的「111111 - 項目名稱最多60個字符」(ProjectNumber [空格] [儀表] [空格]剩餘當前文本 限制爲60個字符)

回答

1

爲了消除不同的分隔符,你需要兩組

-NewName ($_.Name -replace "^(\d+)[\s-_]+(Project.{0,$MaxLength}).*$",'$1 - $2') 
+0

我似乎有一些項目的數量在例如經過下劃線: 12012_Project名稱 有沒有一種簡單的方法搶「所有數字'然後忽略任何東西,直到[a-zA-Z]然後將它們與 - 在中間? (保持字符限制) –

+0

然後在至少有一個字符的字符類中包含下劃線。我會在上面改變它。 – LotPings

+0

或者提供'Project'這個詞總是在兩個捕獲組之間放置'。+'。 '-NewName($ _。Name -replace'^(\ d +)。+(Project。{0,53})。* $','$ 1 - $ 2')' – LotPings

0

您需要更換您的正則表達式

'^(\d+\s*-\s*.{0,60}).*' 

詳細

  • ^ - 串
  • (\d+\s*-\s*.{0,60})的開始 - 第1組:
    • \d+ - 1或多個數字
    • \s*-\s* - 包圍0+空格
    • .{0,60}連字符 - 除換行符外的任何0至60個字符
  • .* - 任何0+字符到行

$1反向引用將只保留由組1拍攝到的值的末尾。