我有一组需要在命名约定中标准化的文件夹。
目前文件夹的名称如下:
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')
}
此脚本将正确执行以下操作:
- 使用文件夹的当前名称
在每个文件夹中写入文本文件- 仅保留数字
重命名文件夹 醇>
我希望脚本可以这样做:
- 使用文件夹的当前名称
在每个文件夹中写入文本文件- 将文件夹重命名为标准“111111 - 项目名称最多60个字符”(ProjectNumber [空格] [破折号] [空格]剩余当前文本 限于60个字符)
醇>
答案 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组捕获的值。