首页 > 解决方案 > 使用 PowerShell 将前导零添加到文件名

问题描述

我有一个包含多个 .mp3 文件的文件夹,所有文件都具有相同的名称和升序。文件名如下所示:

Test 01.mp3
Test 02.mp3
Test 03.mp3
Test 100.mp3
Test 101.mp3
Test 102.mp3

如您所见,第一个文件中前导零的数量是错误的,因为它们应该还有一个。我想使用 PowerShell 来解决这个问题,因为我目前正在学习操作这个非常有用的工具。

我尝试使用替换运算符来计算文件名中的数字以过滤掉任何非数字字符。我假设前 99 个文件将有三位数,而其他文件会有更多(计算 .mp3 文件扩展名的“3”)

Get-Childitem | Where {($_.Name.Replace("\D","")).Length -le 3}

这应该给我任何文件名中包含 3 位或更少数字的文件 - 但它没有。事实上,它没有显示任何内容。如果我将他末尾的数字增加到 11,我会得到前三个测试文件,将其增加到 12 会显示所有六个。我假设 Replace-Operator 在基于 Length-Operator 的过滤之前不会应用于文件名,尽管我在 $_.Name.Replace("\D","") 周围使用了括号

我到底做错了什么?

标签: regexpowershellleading-zero

解决方案


我想通了:Get-ChildItem | Where {($_.Name -replace "\D","").Length -le 3}返回我需要重命名的文件。我使用的整个命令是

Get-ChildItem | Where {($_.Name -replace "\D","").Length -le 3} | Rename-Item -NewName { $_.Name -replace "Test ","Test 0"}

也可以将所有文件重命名为仅数字示意图并使用 padleft 命令,如下所示


推荐阅读