首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用powershell按顺序对扩展名不同的文件进行大容量重命名

使用powershell按顺序对扩展名不同的文件进行大容量重命名
EN

Stack Overflow用户
提问于 2022-03-08 05:03:04
回答 1查看 116关注 0票数 1

是否有一种方法可以对项目进行批量重命名,以便将项目按顺序排列的文件夹更改为零填充的数字,而不管其扩展名如何?

例如,文件夹中的文件名为:

代码语言:javascript
运行
复制
file1.jpg
file2.jpg
file3.jpg
file4.png
file5.png
file6.png
file7.png
file8.jpg
file9.jpg
file10.mp4

最终会变成这样:

代码语言:javascript
运行
复制
01.jpg
02.jpg
03.jpg
04.png
05.png
06.png
07.png
08.jpg
09.jpg
10.mp4

我找到了一个可以按字母顺序重命名文件的脚本。但是,它似乎只接受常规的批量重命名文件(通过选择所有文件,并将它们重命名为读取"file (1).jpg“等),这会在处理不同的文件扩展名时混淆顺序。它似乎也不会用文件名的变化来重命名文件。下面是代码的样子:

代码语言:javascript
运行
复制
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)"
}
EN

回答 1

Stack Overflow用户

发布于 2022-03-08 05:24:04

如果您的意图是根据文件的BaseName结尾位重命名文件,则可以使用Get-ChildItemWhere-Object组合过滤它们,然后使用延迟绑定脚本块将结果传递到Rename-Item

针头可以说,这个代码不处理文件冲突。如果有多个文件具有相同的结束位数和相同的扩展名,则此将错误退出

代码语言:javascript
运行
复制
Get-ChildItem -Filter file* | Where-Object { $_.BaseName -match '\d+$' } |
Rename-Item -NewName {
    $basename = '{0:00}' -f [int][regex]::Match($_.BaseName, '\d+$').Value
    $basename + $_.Extension
}

要测试代码,可以使用以下方法:

代码语言:javascript
运行
复制
@'
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
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71390251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档