所以我有一组文件名如下:
52 39 118 070 13200 5480.txt
83 39 010 392 01000 9970.txt
37 39 880 163 17802 0473.txt
我正在尝试将它们重命名为:
2012年档案说明(52-39-118-070-13200-5480).txt
2012年档案说明(83-39-010-392-01000-9970).txt
2012年档案说明(37-39-880-163-17802-0473).txt
但是,我无法弄清楚相应的正则表达式是什么,以及如何将其编码到PowerShell中。我看到大量的示例来删除空格或下划线,但没有任何内容可以添加到字符串中。
请注意" 2012文件说明"对于所有重命名的文件都是常量。我唯一要改变的是将原始文件名移到括号中并将空格更改为破折号。
谢谢。
答案 0 :(得分:7)
你可以使用单行(直接连接到Rename-Item)来实现,但为了简单起见,我使用了Foreach-Object
cmdlet:
Get-ChildItem -Filter *.txt | Foreach-Object{
$NewName = '2012 File Description ({0}){1}' -f ($_.BaseName -replace '\s','-'),$_.Extension
Rename-Item -Path $_.FullName -NewName $NewName
}
答案 1 :(得分:2)
"52 39 118 070 13200 5480.txt" -replace "(.*)(\.txt)",'2012 File Description ($1)$2'
给出:
2012年档案说明(52 39 118 070 13200 5480).txt
重要说明:替换字符串使用单引号,因为如果美元符号“$”字符出现在以双引号引用的字符串中,则需要对其进行转义。 或者我可以写:
"52 39 118 070 13200 5480.txt" -replace "(.*)(\.txt)","2012 File Description (`$1)`$2"
答案 2 :(得分:1)
你不需要正则表达式。正如肯在评论中所说,你可以使用连接(在Powershell中这很容易)。
类似的东西:
gci Y:\MyFolder -filter '*.txt' | % {rename-item -path $_.fullname -newname "2012 File Description`($($_.basename)`).txt"