使用批处理文件在子文件夹内使用计数器循环重命名大量文件 - Windows 7

Rename large amount of files using a counter loop within subfolders with a batch file - Windows 7

在Windows7 中,我有一个文件夹,其中只包含子文件夹而没有文件。在子文件夹中,我有一堆 .dcm 文件(医学图像)。每个子文件夹中的文件具有相同的名称,我希望它们都具有不同的名称,更具体地说,我希望名称顺序为 1.dcm、2.dcm、3.dcm 等。

现状: 文件夹 A、B 和 C,每个文件夹包含 File1.dcm、File2.dec、File3.dcm 想要这个: 文件夹 A 包含文件 1.dcm、2.dcm、3.dcm 文件夹 B 包含文件 4.dcm、5.dcm、6.dcm 文件夹 C 包含文件 7.dcm、8.dcm、9.dcm

有没有办法编写一个批处理文件,按顺序进入每个子文件夹并按数字顺序重命名文件?在为 Windows 编写脚本时,我是一个新手,不知道如何去做。我找到了更改子文件夹中的文件扩展名的代码,但没有满足我的要求。

非常感谢任何帮助!

@Echo off
For /f "tokens=1* delims=:" %%A in (
  'Dir /B/S/ON/A-D "X:\path\to\folder\*.dcm" ^|findstr /N /V "^$"'
) Do Echo Ren "%%~fB" "%%A%%~xB"

如果输出看起来没问题,请删除最后一行中的回显。
如果您在一个文件夹中有不同长度的数字,请注意按名称排序将在 2 之前有 10。


为了更好的理解一些解释:

目录 /B/S/ON/A-D "X:\path\to\folder*.dcm"
/B是格式
/Subdtree 递归
/ON排序
/A属性-(不是)D目录

Findstr /N /V "^$"
/Nnumber 每个输出行用冒号分隔。
/inV删除匹配项
"^$" a Regular Expression 表示空行
^ 匹配一行的开头
$ 匹配行尾

For /f "tokens=1* delims=:" %%A in ('command') do
将 'comand' 的输出解析为标记 1=%%A 和 *=rest 为 %%B
分隔符 : 仅用于标记 1,
令牌 2 占用该行的其余部分(对于保留驱动器冒号很重要)

变量 %%A 和 %%B 被传递给 do(部分)

可以使用 ~ 修饰符修改 for vars 参见 For /?
%%~fB ~f 表示全名,包括 dirve 和路径,
%%A%%~xB ~x 是 %%~xB 的扩展名,包括点