我在目录中有大量文件,具有这种命名约定:“[Date] [Lastname] 345.pdf”。注意:345对于所有这些都是常量
我想重命名所有文件,以便他们阅读“[Lastname] [Date] 345.pdf”。
编辑:我最初打错了
我取得了一些成功:
gci -Filter *.pdf| %{Rename-Item $_.fullname $_.Name.Split(" ")[1]}
但这只给了我“[Date] .pdf”。基本上,我无法弄清楚如何使用上面的命令来组合拆分的两个不同部分。我基本上想要“[1] [0] [2] .pdf”,如果这是有道理的。
感谢。
答案 0 :(得分:1)
使用正则表达式的另一种方法:
Get-ChildItem *.pdf | % {
$newName = $_.Name -replace '^(.*) (\S+) (\S+\.pdf)$', '$2 $1 $3'
Rename-Item $_ $newName
}
正则表达式细分:
^(.*)
匹配字符串开头的任意数量的字符,并在组中捕获它们。示例文件名[Date]
中的[Date] [Lastname] 345.pdf
。(\S+)
匹配一个或多个连续的非空白字符,并在第二组中捕获它们。示例文件名[Lastname]
中的[Date] [Lastname] 345.pdf
。(\S+\.pdf)$
匹配一个或多个连续的非空白字符,后跟字符串末尾的字符串.pdf
,并捕获第三组中的字符串。示例文件名345.pdf
中的[Date] [Lastname] 345.pdf
。这些群组由$1
,$2
和$3
引用,因此替换字符串'$2 $1 $3'
会按照您希望的方式对群组进行重新排序。
答案 1 :(得分:0)
给这一点。
gci *.pdf| %{
$Name = $PSItem.Name.Split(' ');
$Dest = ('{0} {1} {2}' -f $Name[1], $Name[0], $Name[2]);
Move-Item $PSItem.FullName -Destination $Dest;
};