[英]Batch Rename Files in a Directory By Rearranging Filenames
我的目录中有许多文件具有这种命名约定:“ [日期] [姓氏] 345.pdf”。 注意:345对于所有变量都是恒定的
我想重命名所有文件,以便它们显示为“ [Lastname] [Date] 345.pdf”。
编辑:我最初在那里有一个错字
我在以下方面取得了一些成功:
gci -Filter *.pdf| %{Rename-Item $_.fullname $_.Name.Split(" ")[1]}
但这只给了我“ [Date] .pdf”。 基本上,我不知道如何使用上述命令来组合拆分的两个不同部分。 如果可以的话,我基本上想要“ [1] [0] [2] .pdf”。
谢谢。
使用正则表达式的另一种方法:
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
中的345.pdf
文件名[Date] [Lastname] 345.pdf
。 $1
, $2
和$3
引用了这些组,因此替换字符串'$2 $1 $3'
以所需的方式对组进行重新排序。
试一下。
gci *.pdf| %{
$Name = $PSItem.Name.Split(' ');
$Dest = ('{0} {1} {2}' -f $Name[1], $Name[0], $Name[2]);
Move-Item $PSItem.FullName -Destination $Dest;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.