我有一堆名为
的文件attachment.023940
attachment.024039
attachment.024041
attachment.024103
等...
我需要通过递增给定数字的文件编号来重命名文件。 (这样它们匹配数据库中的正确ID)
我想我可以编写一个使用RegEx来解析文件名的C#应用程序,但我认为这是一个可以在PowerShell中完成的任务吗?
我发现有几个关于使用PowerShell重命名文件的其他线程,但没有一个处理递增文件编号。
我使用的是Win7,因此可以使用PowerShell 2.0。
答案 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宽。