在 Windows 10 命令提示符中,是否可以使用基于字符位置而不是字符值的多个分隔符来重命名文件?

在 Windows 10 命令提示符中,是否可以使用基于字符位置而不是字符值的多个分隔符来重命名文件?

在我的探索细节如下之前,先简单概括一下问题和疑问:

命令提示符,我需要一个ren命令来重命名以下格式的所有文件: vfx_444xx.png其中xx是两位数,按从到00的顺序93

得到以下结果: 目标格式:vfx_444_xx.png

改变只是在上面“xx”匹配的两个数字前添加一个下划线。

以下是我在 Google、windowscentral.com 和 SE 上搜索的完整列表:[注意:很抱歉 SE 没有注意到这些条目的格式。它们各自位于单独的一行。因为这进一步证明我在来这里之前做了尽可能多的研究,而不是贡献信息,好吧。]

5:31 PM  Where to ask DOS operating system question about the command prompt? 
- Meta Stack Exchange 5:31 PM  stackexchange dos - Google Search 
5:29 PM  dos rename "insert character" -unix -sed - Google Search 
5:29 PM  dos rename "insert character" - Google Search 
5:27 PM  "command prompt" rename files "insert character" - Google Search 
5:26 PM  "windows 10" "command prompt" rename files "insert character"- Google Search 
5:26 PM  "windows 10" "command prompt" rename files "insert character" - Google Search

下午 5:25 “windows 10” “命令提示符” 重命名多个文件 “插入字符” - Google 搜索 下午 5:24 dos 重命名多个文件 “插入字符” - Google 搜索 下午 5:08 如何在 Windows 10 上批量重命名多个文件 | Windows Central 下午 5:08 如何在 Windows 10 上批量重命名多个文件 | Windows Central 下午 5:07 如何在 Windows 10 上批量重命名多个文件 | Windows Central 下午 4:58 如何在 Windows 10 上批量重命名多个文件 | Windows Central 下午 4:47 dos 重命名多个文件 - Google 搜索

我阅读了评论者就一个不相关的 DOS 问题推荐的所有 SE 帖子:“Windows RENAME 命令如何解释通配符?”

有很多信息,但我找不到任何关于如何在目标掩码中插入源掩码中没有的字符的指导。

以下是我在超级用户搜索字段中尝试过的各种术语:windows 重命名在目标掩码中插入字符windows 重命名插入字符windows 重命名插入windows 重命名目标插入

再次,这是源格式: vfx_444xx.png其中xx是两位数,按从到00目标93 格式的顺序排列:vfx_444_xx.png

我决定在文件的临时目录中尝试一些命令: ren vfx_44400.png ???????_??.png -->vfx_444_0.png
这失败了,因为目标中的下划线选择了0源中的第一个

ren vfx_444*.png vfx_444_*.png ---> 前十个文件被重命名为与上面的尝试相同的名称,然后对于剩余的文件抛出未找到文件的错误。

接下来我阅读了一些有关批处理命令的资料。我发现一个人需要的东西与我需要的类似(命令提示符不合逻辑?想要使用重命名添加数字

for /f "tokens=1,2 delims=_" %a in ('dir /b img_*.jpg') do ren "%a_%b" "%a_1%b"

正如您所看到的,这会1在下划线后插入一个。我需要根据字符位置而不是特定字符定义两个不同的分隔符。例如:

for /f "tokens=1,2,3 delims=(substring{0,7), substring(7))" %a in .....

我怀疑“子字符串”必须编码为批处理文件中的子程序 = 编写代码。呃。

此时(4 小时)我已经被整个事情搞得精疲力尽,真的需要你们这些天才的帮助,让我找到正确的方向。提前感谢你们阅读我的旅程,也许你们可以提供解决方案。

答案1

您可以使用 powershell 轻松执行批量重命名任务:

$i = 0; Get-ChildItem "Filepath" | Foreach { $i++; rename-item -Path $_.Fullname -newname { $_.basename.substring(0,$_.name.length-2) + "_$($i)" + $_.extension}}

答案2

又过了 4 个小时,我找到了它。第一次运行:

cmd /v

然后,在这个终端内,转到您的文件夹并运行:

@for %i in (vfx_444*.png) do @(set "line=%i" && echo !line:~0,-6!_!line:~-6,7!)

您可以cmd /v在循环内部调用,方式如下:

@for %i in (vfx_444*.png) do @cmd /v /c "set line=%i && echo !line:~0,-7!_!line:~-7,7!"

不过我还没有在 Win10 中测试过这个。

答案3

for /l %i in (44400 1 44493)do cmd/v/c "set "_xx=%i" & ren vfx_%i.png vfx_444_!_xx:~-2!.png"

在此处输入图片描述

您不需要for /f使用多个分隔符,只需要范围内的数字44400-44493,因此使用为for /l您提供循环中的当前数字的子字符串,并以最后一位02数字开头定义一个子字符串,以_组成命令的目标名称rename

    Numbers in loop:                    %i == 44400-44493
Orinal name in loop:            vfx_%i.png == vfx_44400.png - vfx_44493.png
Target name in loop: vfx_444_!_xx:~-2!.png == vfx_444_00.png - vfx_444_93.png

[√]For 循环

[√]For/L 循环

[√]For/F 循环

[√]字符串操作(子字符串)

答案4

其他电源外壳方法。没有理由使用Windows 10

详细:

Get-ChildItem "vfx_444??.png" | Rename-Item -NewName { $_.Name -replace 'vfx_444', 'vfx_444_' }

KeyBanger:

gci "vfx_444??.png" | ren -New { $_.Name -replace 'vfx_444', 'vfx_444_' }

相关内容