我有一堆文件命名为:
01. Filename.ext
02. Filename.ext
03. Filename.ext
etc.
我需要通过将文件名开头的数字增加一个特定值(例如 15)来使用 PowerToys PowerRename 批量重命名它们,以便它们的名称变为,例如:
16. Filename.ext
17. Filename.ext
18. Filename.ext
etc.
据我了解,我应该为此任务使用正则表达式。不幸的是,这就是我对此事的全部了解。
所以我要你帮忙完成这个确切的任务:在“搜索:”和“替换为:”字段中输入什么?
PowerShell选项:
分解它:
-match
运算符使用正则表达式匹配,返回一个布尔值并填充$Matches
自动变量。正则表达式'^(\d+)(.+)$'
将匹配以一个或多个数字开头且这些数字后至少有一个字符的任何字符串,并生成两个捕获组,第一个中的前导数字和第二个中的所有后续文本:-f
Format 运算符使用模板和值/变量列表构造字符串。像in这样的格式说明符可以添加前导零:d2
{0:d2}
-NewName
可以是字符串或脚本块,脚本块允许新名称基于当前$Matches
变量中的值:PowerRename 不是此类复杂重命名的正确工具。更强大的工具是 批量重命名实用程序,免费供个人使用。
例如,我结合以下操作:
// 编辑
受到@Keith Miller使用降序/反向循环重命名 cmd/bat 文件的想法的启发:
要在 PowerShell 中执行相同操作:
编辑 //
您也可以在命令行中执行此操作:
观察:1。假设在重命名两位数时
观察:2。您的文件夹共有 84 个文件 = 100 - 16
观察:3。所有文件具有相同的扩展名。
1.首先给每个文件添加一个数字,重命名
16. file.ext
->016. file.ext
,这样可以避免重命名01. file.ext
为16. file.ext
(现有文件)的名称时发生冲突观察:4。使用
For /L
从 1 到 84 的循环,定义_n=001
,当添加 00 时,在前面的变量%i
中,最大长度为 2 的子字符串(文件源"!_n:~-2!.*.ext"
)和最大长度为 3 的子字符串(文件目标"!_n:~-3!.*.ext"
)将用于ren
在循环中重命名文件:2.再次使用
For /L
从1到84的循环,定义_c=1000%~i+15
,当添加1000时,添加到变量%i
中,最大长度为3的子字符串(文件源"!_c:~-3!.*.ext"
)和最大长度为3的子字符串(文件目标"!_n:~-2!.*.ext"
)将ren
用于重命名您的循环中的文件:观察:5。循环中的结果将从 1 到 84:
观察:6。这可以很容易地扩展到 1 到 840、1 到 8400,...:
在 Bat/CMD 中相同:
一些进一步的阅读:
[√]设置/?
[√]命令 /?
[√]任 | 改名
[√]循环
[√] For /F 循环
[√]语法子串
[√]理解批处理文件中的start、2>nul、cmd等符号