Powershell批处理文件夹重命名项目 - 限制长度和标准化

时间:2017-09-05 13:28:24

标签: regex 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. 在每个文件夹中写入文本文件   
  3. 仅保留数字
  4. 重命名文件夹   

我希望脚本可以这样做:

  
      
  1. 使用文件夹的当前名称
  2. 在每个文件夹中写入文本文件   
  3. 将文件夹重命名为标准“111111 - 项目名称最多60个字符”(ProjectNumber [空格] [破折号] [空格]剩余当前文本   限于60个字符)
  4.   

2 个答案:

答案 0 :(得分:1)

要消除不同的分隔符,您需要两组

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

答案 1 :(得分:0)

您需要用

替换正则表达式
'^(\d+\s*-\s*.{0,60}).*'

<强>详情

  • ^ - 字符串开头
  • (\d+\s*-\s*.{0,60}) - 第1组:
    • \d+ - 一位或多位
    • \s*-\s* - 用0+空格包围的连字符
    • .{0,60} - 除了换行符之外的任何0到60个字符
  • .* - 直到行尾的任何0 +字符

$1反向引用只会保留第1组捕获的值。