File 是否使用PowerShell将文件重命名为增量文件号?
我有一堆文件名为File 是否使用PowerShell将文件重命名为增量文件号?,file,powershell,rename,File,Powershell,Rename,我有一堆文件名为 attachment.023940 attachment.024039 attachment.024041 attachment.024103 等等 我需要通过将filenumber增加一个给定的数字来重命名这些文件。(以便它们与数据库中的正确ID匹配) 我想我可以编写一个C#应用程序,使用RegEx解析文件名,但我假设这是一项也可以在PowerShell中完成的任务 我在SO上发现了其他几个关于使用PowerShell重命名文件的线程,但没有一个线程处理文件号递增的问题 我
attachment.023940
attachment.024039
attachment.024041
attachment.024103
等等
我需要通过将filenumber增加一个给定的数字来重命名这些文件。(以便它们与数据库中的正确ID匹配)
我想我可以编写一个C#应用程序,使用RegEx解析文件名,但我假设这是一项也可以在PowerShell中完成的任务
我在SO上发现了其他几个关于使用PowerShell重命名文件的线程,但没有一个线程处理文件号递增的问题
我使用的是Win7,所以PowerShell 2.0可用。类似的东西
$file = Get-ChildItem attachment.012345
$file.basename + ".0" + ([int]::parse([regex]::split($file.extension,"\D")) + 123).tostring()
PS > attachment.012468
假设您的文件号都是6位数字,并且需要保留前导零:
$increment = 1
gci attachment.$("[0-9]"*6) | sort -descending |% {
$newext = $increment + $_.name.split(".")[1]
rename-item $_.fullname -newname ('attachment.' + "{0:D6}" -f $newext)
}
以下方法恰好起作用,因为数字位于文件名的
扩展名部分
Get-ChildItem attachment.* | Sort Extension -desc |
Rename-Item -NewName {$_.basename +
".{0:D6}" -f ([int]$_.extension.substring(1) + 1)}
这利用了管道进入重命名项
,并将脚本块与其他管道可绑定参数一起使用,如NewName
我使用它来重命名文件。请记住,foreach
是一个脚本块,因此您只需在末尾添加一个命令来增加变量,如
Get-ChildItem attachment.* | Move-Item -Destination {
"attachment.{0}" -f (([int]($_.Name -replace '.*\.(\d+)','$1')) + $increment)
}
PS C:\BigHomie> $A = 1
PS C:\BigHomie> dir .\*.* | Sort-Object | foreach {Rename-Item -Path $_.PSPath -NewName $("Attachment." + "{0:D6}" -f $A);$A=++$A}
注意末尾的$A=++$A
会增加计数器,还有D6
数字格式化程序,保证最小宽度为6。如果不先对名称进行排序,在您有机会将41重命名为42之前,您可能会将文件41与文件40一起写入。实际上,Move Item&rename Item不会覆盖,但你是对的,最好先分类。