如何使用 Windows 10 PowerToys 的 PowerRename 将文件名中的数字增加指定的值?

如何使用 Windows 10 PowerToys 的 PowerRename 将文件名中的数字增加指定的值?

我有一堆文件,名称如下:

01. Filename.ext
02. Filename.ext
03. Filename.ext
etc.

我需要使用 PowerToys PowerRename 批量重命名它们,方法是将文件名开头的数字增加一个特定值,比如说 15,这样它们的名称就变成例如:

16. Filename.ext
17. Filename.ext
18. Filename.ext
etc.

据我所知,我应该使用正则表达式来完成这项任务。不幸的是,这是我对此事的全部理解。

因此,我请求您帮助我完成这个确切的任务:在“搜索:”和“替换为:”字段中输入什么?

答案1

PowerRename 不是适合这种复杂重命名的工具。更强大的工具是 批量重命名实用程序,免费供个人使用。

例如,我结合以下操作:

  1. 删除前两个字符
  2. 在前面添加一个从 16 开始递增的数字

在此处输入图片描述

答案2

电源外壳选项:

$Increment = 15
Get-ChildItem | Where Name -match '^(\d+)(.+)$' |
    Select FullName,
           @{ N = 'Index'    ; E = { [Int]$Matches[1] }},
           @{ N = 'NameText' ; E = { $Matches[2] }} |
Sort Index -Descending | ForEach{    
    Rename-Item $_.FullName -NewName ( '{0:d2}{1}' -f ( $_.Index + $Increment ), $_.NameText ) }

具体来说:

  • -match操作员用途正则表达式匹配,返回布尔值并填充$Matches自动变量. 正则表达式'^(\d+)(.+)$'将匹配以一个或多个数字开头且这些数字后跟至少一个字符的任何字符串,并生成两个捕获组,第一个捕获组包含前导数字,第二个捕获组包含所有后续文本:
PS C:\>>'01. FileName.txt' -match '^(\d+)(.+)$'
True
PS C:\> $matches

Name                           Value
----                           -----
2                              . FileName.txt
1                              01
0                              01. FileName.txt
PS C:\>'{0:d2}{1}' -f 7, '. FileNaem.txt'
07. FileNaem.txt
  • 重命名项目Cmdlet 的-NewName参数可以是字符串或脚本块,脚本块允许新名称基于当前$Matches变量中的值:
 { '{0:d2}{1}' -f ( $Increment + $matches[1] ), $matches[2] }

答案3

// 编辑

灵感来自@Keith Miller 的在cmd/bat中使用降序/反向循环重命名文件的想法:

set "_n=" & set "_c=" & <nul (for /l %i in (99 -1 16)do set/a "_c=100%~i-15, _n=100%~i" && cmd/v/c "ren "!_c:~-2!.*.ext" "!_n:~-2!.*.ext"")

要在 PowerShell 中执行相同操作:

$i=(ls *.ext).count+16 ; For($i -eq 15; $i--) {
  $old=($i-15).ToString("00") ; ls $($old+'. *.ext')|
  % {ren $_ -new ($_.Name.Replace("$old. ","$i. "))}}

编辑 //


set "_n=" & for /l %i in (1 1 84)do @set "_n=00%~i" && @cmd/v/c "ren "!_n:~-2!.*.ext" "!_n:~-3!.*.ext""
set "_n=" & set "_c=" & >nul (for /l %i in (1 1 84)do @set/a "_c=1000%~i+15" && @set/a "_n=1000+%~i" && @cmd/v/c "ren "!_n:~-3!.*.ext" "!_c:~-2!.*.ext"")

您也可以在命令行中执行此操作:

观察:1.假设在重命名两位数时

观察:2。您的文件夹共有 84 个文件 = 100 - 16

观察:3。所有文件都有相同的扩展名。

1.首先,给每个文件添加一个数字,重命名16. file.ext->016. file.ext,从而避免重命名时发生冲突01. file.ext以……的名义16. file.ext(现有文件)

set "_n=" & for /l %i in (1 1 84)do @set "_n=00%~i" && @cmd/v/c "ren "!_n:~-2!.*.ext" "!_n:~-3!.*.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循环重命名文件:

for /l %i in (1 1 84)do @set/a "_c=1000%~i+15" && @set/a "_n=1000+%~i" && @cmd/v/c "ren "!_n:~-3!.*.ext" "!_c:~-2!.*.ext""

观察:5。循环中的结果将从 1 到 84:

ren 001.file.ext 16.file.ext
ren 002.file.ext 17.file.ext
ren 003.file.ext 18.file.ext
    ...
ren 084.file.ext 99.file.ext

观察:6。这可以轻松扩展到 1 到 840、1 到 8400,...:

for /l %i in (1 1 840)do ...
 ...  set "_n=000%~i" 
 ...  cmd/v/c "ren "!_n:~-3!.*.ext" "!_n:~-4!.*.ext""

for /l %i in (1 1 840)do ...
...  set/a "_c=10000%~i+15"
...  set/a "_n=10000+%~i"
...  cmd/v/c "ren "!_n:~-4!.*.ext" "!_c:~-3!.*.ext"")

Bat/CMD中也是一样:

@echo off && cd /d "%~dp0"

set "_n=" & for /l %%i in (1 1 84
)do set "_n=00%%~i" && cmd/v/c "ren "!_n:~-2!.*.ext" "!_n:~-3!.*.ext""

set "_n=" & set "_c=" & >nul (for /l %%i in (1 1 84
)do set/a "_c=1000%%~i+15, _n=1000+%%~i" && cmd/v/c "ren "!_n:~-3!.*.ext" "!_c:~-2!.*.ext"")

相关内容