我大约有1,500个文件夹,后4位数字代表一年。我需要在一年左右添加括号,同时保留其余名称。文件夹名称的长度从大约4个字符到20个以上的字符不等。某些文件夹名称包含日期以外的数字。
我找到了一种在文件夹名称末尾加括号的方法。 以及从名称开头的特定位置添加括号的方法。但是似乎找不到找到从名称末尾倒数的方法。
Get-ChildItem -Directory | Rename-Item -NewName {$_.Name -replace '^' ,")"}
Get-ChildItem -Directory | % { $_ | Rename-Item -NewName ($_.Name -replace '^([\S\s]{5})', '$1(')}
我想要一个这样的文件夹:
Short.1990 Long.Folder.name.2019 Folder.1.1998
并以这样的文件夹名称结尾:
Short.(1990) Long.Folder.name.(2019) Folder.1.(1998)
答案 0 :(得分:2)
尝试以下-replace
操作:
PS> 'Short.1990', 'Long.Folder.name.2019' -replace '\.(\d{4})$', '.($1)'
Short.(1990)
Long.Folder.name.(2019)
在您的命令上下文中:
Get-ChildItem -Directory |
Rename-Item -NewName { $_.Name -replace '\.(\d{4})$', '.($1)' } -WhatIf
说明,... -replace '\.(\d{4})$', '.($1)'
:
正则表达式\.(\d{4})$
匹配文字.
(转义为\.
),并在末尾(\d{4}
后跟4位数字($
) )的输入(文件名)。
\d{4}
括在(...)
中会创建一个捕获组来捕获匹配的特定数字,因此可以在替换操作数中将它们称为$1
(第一个捕获组的值)。替换表达式'.($1)'
将正则表达式整体匹配的内容替换为文字.
,后跟捕获在文字{{1}中的4位数字序列($1
) }。
有关(...)
运算符的全面概述,请参见this answer。
答案 1 :(得分:1)
结尾的.year实际上是可以替换的扩展名:
一个衬板:
gci -dir|?{$_.Extension -match '^\.(\d{4})$'}|Ren -New {$_.Name -replace $_.Extension,(".({0})" -f $Matches[1])} -WhatIf
更详细的脚本:
Get-ChildItem -Directory | Where-Object {$_.Extension -match '^\.(\d{4})$'} |
Rename-Item -Newname {$_.Name -replace $_.Extension,(".({0})" -f $Matches[1])} -WhatIf
样本输出(德语区域设置):
WhatIf: Ausführen des Vorgangs "Verzeichnis umbenennen" für das Ziel "Element: A:\Folder.1.1998 Ziel: A:\Folder.1.(1998)".
WhatIf: Ausführen des Vorgangs "Verzeichnis umbenennen" für das Ziel "Element: A:\Long.Folder.name.2019 Ziel: A:\Long.Folder.name.(2019)".
WhatIf: Ausführen des Vorgangs "Verzeichnis umbenennen" für das Ziel "Element: A:\Short.1990 Ziel: A:\Short.(1990)".
答案 2 :(得分:0)
也许甚至不需要使用正则表达式,而只需使用以下内容即可。如果万一所有文件夹都包含点并且以年末结尾!
$folders = Get-ChildItem "Path to you Share holding all your subfolders"
foreach($folder in $folders){
try{
$splitYear = $folder.Name.Split(".")[-1]
$newName = $folder.Name.Replace($splitYear,"($splitYear)")
Rename-Item -Path $folder.FullName -NewName $newName
Write-Host "Changed name $($folder.name) to new name $newName" -ForegroundColor Green
}catch{
Write-Host "Couldn't change folder $($folder.Name), because $($_.Exception.Message)" -ForegroundColor Red
}
}