使用PowerShell重命名文件以增加文件编号?

时间:2011-01-16 15:06:14

标签: file powershell rename

我有一堆名为

的文件
attachment.023940
attachment.024039
attachment.024041
attachment.024103

等...

我需要通过递增给定数字的文件编号来重命名文件。 (这样它们匹配数据库中的正确ID)

我想我可以编写一个使用RegEx来解析文件名的C#应用​​程序,但我认为这是一个可以在PowerShell中完成的任务吗?

我发现有几个关于使用PowerShell重命名文件的其他线程,但没有一个处理递增文件编号。

我使用的是Win7,因此可以使用PowerShell 2.0。

5 个答案:

答案 0 :(得分:2)

以下方法恰好起作用,因为该数字位于文件名的Extension部分。

Get-ChildItem attachment.* | Sort Extension -desc | 
  Rename-Item -NewName {$_.basename + 
                        ".{0:D6}" -f ([int]$_.extension.substring(1) + 1)}

这利用了管道Rename-Item并将脚本块与其他管道可绑定参数一起使用,如NewName

答案 1 :(得分:0)

这样的东西?

$file = Get-ChildItem attachment.012345
$file.basename + ".0" + ([int]::parse([regex]::split($file.extension,"\D")) + 123).tostring()


    PS > attachment.012468

答案 2 :(得分:0)

假设您的文件编号都是6位数,并且需要保留前导零:

$increment = 1
gci attachment.$("[0-9]"*6) | sort -descending |% {
$newext = $increment + $_.name.split(".")[1]
rename-item $_.fullname -newname ('attachment.' + "{0:D6}" -f $newext)
} 

答案 3 :(得分:0)

Get-ChildItem attachment.* | Move-Item -Destination {
  "attachment.{0}" -f (([int]($_.Name -replace '.*\.(\d+)','$1')) + $increment)
}

答案 4 :(得分:0)

我用它来重命名我的文件。请记住,foreach是一个脚本块,所以你要做的就是在最后添加一个命令来增加你的变量,比如

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宽。