繁体   English   中英

通过重新排列文件名来批量重命名目录中的文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM