批量重命名文件名,保留扩展名?

批量重命名文件名,保留扩展名?

(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增加计数器变量。

相关内容