(Win10)在批处理文件中,如何递归重命名文件名称在文件夹中?不是扩展。
例如
要重命名的文件:heavy.doc、bright.jpg、fast.docx、quiet.png 等
重命名为:A1.*、A2.*、A3.*、A4.* 等(其中 .* 保留原始扩展名)
变成:A1.doc、A2.jpg、A3.docx、A4.png等
谢谢!
答案1
快速浏览一下参考页面为了,我可以想到这个:
@echo off & setlocal EnableDelayedExpansion
set a=1
for /f "tokens=1,2 delims=." %%G in ('dir /b /s /A:-D') do (
ren "%%G.%%H" "A!a!.%%H"
set /a a+=1
)
更新:最好将初始文件夹作为参数传递,这样脚本本身就可以放在任何地方,并且不会有被重命名的风险。
@echo off & setlocal EnableDelayedExpansion
set a=1
for /f "tokens=1,2 delims=." %%G in ('dir /b /s /A:-D %1') do (
ren "%%G.%%H" "A!a!.%%H"
set /a a+=1
)
解释:
@echo off
这避免了将每个命令写入控制台。
setlocal EnableDelayedExpansion
这是为了让a
变量真正增加所必需的。
set a=1
我们创建一个名为的计数器变量a
并将其初始值设置为1
。
for /f
循环查看文件名列表。
tokens=1,2 delims=.
.
当遇到a 时,文件名将被拆分。我们感兴趣的是此操作产生的前两个标记。笔记:文件名应该不是包含一个点,基本名称和扩展名之间除外。
%%G
是第一个标记的名称(隐含地,第二个标记将是%%H
)。
in ('dir /b /s /A:-D %1')
循环dir
命令的结果,列出作为参数传递的目录中的文件,%1
并带有以下选项:/b
清理输出、/s
包含子目录的结果、/A:-D
仅列出文件而不列出文件夹名称。
ren "%%G.%%H" "A!a!.%%H"
将文件名重命名(%%G.%%H
重建原始文件名)为常量A
加上变量a
的当前值加上原始扩展名%%H
。
set /a a+=1
增加计数器变量。