在具有这种命名约定的目录中,我有大量文件:"Date 345.pdf“。注: 345对于所有的人来说都是常数。
我想重命名所有的文件,以便他们读"Lastname 345.pdf“。
编辑:我最初在那里有一个错误。
我在以下方面取得了一些成功:
gci -Filter *.pdf| %{Rename-Item $_.fullname $_.Name.Split(" ")[1]}但这只给了我"Date.pdf“。基本上,我不知道如何使用上面的命令组合拆分的两个不同部分。我基本上想要“1.2.pdf”,如果这有任何意义的话。
谢谢。
发布于 2014-01-14 18:36:30
另一种方法是使用正则表达式:
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'按照您想要的方式重新排序组。
发布于 2014-01-14 16:48:53
试试看。
gci *.pdf| %{
$Name = $PSItem.Name.Split(' ');
$Dest = ('{0} {1} {2}' -f $Name[1], $Name[0], $Name[2]);
Move-Item $PSItem.FullName -Destination $Dest;
};https://stackoverflow.com/questions/21118970
复制相似问题