是否有一种方法可以对项目进行批量重命名,以便将项目按顺序排列的文件夹更改为零填充的数字,而不管其扩展名如何?
例如,文件夹中的文件名为:
file1.jpg
file2.jpg
file3.jpg
file4.png
file5.png
file6.png
file7.png
file8.jpg
file9.jpg
file10.mp4
最终会变成这样:
01.jpg
02.jpg
03.jpg
04.png
05.png
06.png
07.png
08.jpg
09.jpg
10.mp4
我找到了一个可以按字母顺序重命名文件的脚本。但是,它似乎只接受常规的批量重命名文件(通过选择所有文件,并将它们重命名为读取"file (1).jpg“等),这会在处理不同的文件扩展名时混淆顺序。它似乎也不会用文件名的变化来重命名文件。下面是代码的样子:
Get-ChildItem -Path C:\Directory -Filter file* | % {
$matched = $_.BaseName -match "\((?<number>\d+)\)"
if (-not $matched) {break;}
[int]$number = $Matches["number"]
Rename-Item -Path $_.FullName -NewName "$($number.ToString("000"))$($_.Extension)"
}
发布于 2022-03-08 05:24:04
如果您的意图是根据文件的BaseName
结尾位重命名文件,则可以使用Get-ChildItem
和Where-Object
组合过滤它们,然后使用延迟绑定脚本块将结果传递到Rename-Item
。
针头可以说,这个代码不处理文件冲突。如果有多个文件具有相同的结束位数和相同的扩展名,则此将错误退出。
Get-ChildItem -Filter file* | Where-Object { $_.BaseName -match '\d+$' } |
Rename-Item -NewName {
$basename = '{0:00}' -f [int][regex]::Match($_.BaseName, '\d+$').Value
$basename + $_.Extension
}
要测试代码,可以使用以下方法:
@'
file1.jpg
file2.jpg
file3.jpg
file4.png
file5.png
file6.png
file7.png
file8.jpg
file9.jpg
file10.mp4
'@ -split '\r?\n' -as [System.IO.FileInfo[]] | ForEach-Object {
$basename = '{0:00}' -f [int][regex]::Match($_.BaseName, '\d+$').Value
$basename + $_.Extension
}
https://stackoverflow.com/questions/71390251
复制相似问题