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不会覆盖,但你是对的,最好先分类。