本文链接: http://oicu.cc.blog.163.com/blog/static/12303947120091163372228/

原文链接: http://www.newsmth.net/bbscon.php?bid=34&id=17370

又来陈年老帖了……以前没有工具的时候就喜欢写点批处理来解决问题,特别
是在一个没有管理员权限、没有外网网络、没有光驱又封了USB的环境,批处
理可是发挥了大作用。

发信人: oicu (Oh! I see you!), 信区: DOS
标  题: 按数字递增批量重命名文件的批处理
发信站: 水木社区 (Sat Dec 16 02:33:49 2006), 站内

一时兴起写了个简单的批量重命名的批处理:

从数字1递增批量重命名ren.bat
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set /A num=0
FOR /F "tokens=*" %%i in ('dir /A-D /B /OD /TC') do (
IF NOT "%%i"=="%~n0%~x0" (
set /A num+=1
ren "%%i" "!num!%%~xi"
)
)
ENDLOCAL
exit



按00001这类格式递增批量重命名ren.bat:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set /A num=0
FOR /F "tokens=*" %%i in ('dir /A-D /B /OD /TC') do (
IF NOT "%%i"=="%~n0%~x0" (
set /A num+=1
if !num! LSS 10 (
ren "%%i" 0000!num!%%~xi
) ELSE (
if !num! LSS 100 (
ren "%%i" 000!num!%%~xi
) ELSE (
if !num! LSS 1000 (
ren "%%i" 00!num!%%~xi
) ELSE (
if !num! LSS 10000 ren "%%i" 0!num!%%~xi
)
)
)
)
)
ENDLOCAL
exit


如果觉得0多了,可以用下面的批处理来去掉,默认是去1个,要去多少个就
把!name:~1!中的数字1改成要去的个数,改这个批处理要比改前面的批处理
方便一些,所以写了这个用:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set name=
FOR /F "tokens=*" %%i in ('dir /A-D /B /OD /TC') do (
IF NOT "%%i"=="%~n0%~x0" (
set name=%%i
set name=!name:~1!
ren "%%i" "!name!"
)
)
ENDLOCAL
exit

上面的批处理要和文件放在一个目录里,命名后删除批处理文件即可。

直接使用dir的话,缺点是重命名的时候把批处理本身及子文件夹也改名了,而且
所得文件名字不能连续排序(批处理文件可能占了中间某个序号),因此用dir参
数进行排除文件夹内的子文件夹以及排序(排序目的就是把批处理排到最后)。

还有就是重名现象不好解决,如果原来已经含有一个重命名后可能会出现的名称,
名称被占用了程序就不能继续运行。可以事先用系统的重命名功能命名一次,方
法是选择要重命名的所有文件,Ctrl+a或者选择第一个再按住Shift不放,再选最
后一个进行连续选择,右键点击其中一个文件,选择重命名,然后随便写一个名
字,你将看到系统的批量命名是以括号内数字递增的。


排序参数的说明:
下面这行
FOR /F "tokens=*" %%i in ('dir /A-D /B /OD /TC') do (
中的/OD参数是按时间排序,使用的时候把批处理文件复制到文件夹里,那么批处
理文件的创建时间就是最后的了,解决了文件连续的问题。

如果用/O-E也可以,这样也能使批处理文件排在最后(扩展名是bat,b的优先级高,
用-号来颠倒顺序)。

/OD后再加/TC更准确些。

dir中/O和/T参数的说明:
/O           用分类顺序列出文件。
sortorder    N  按名称(字母顺序)     S  按大小(从小到大)
E  按扩展名(字母顺序)   D  按日期/时间(从先到后)
G  组目录优先           -  颠倒顺序的前缀


/T           控制显示或用来分类的时间字符域。
timefield    C  创建时间
A  上次访问时间
W  上次写入的时间

for会自动去掉空行的,所以参数肯定不为空。
Update: 2009/12/18

从数字1递增批量重命名ren.bat 这个如果改用shell的就简便多了:

#!/bin/csh
n=0
foreach file (`ls`)
@ n += 1
mv $file $n
end

可以把文件都改成0到**的,有多少改多少。

--
▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
▏MM Hunter.        Oh! My Goddess!                      × ▏
▏︹--+--︹  搜寻PPMM中                    当前进度:86%    ▏
▏/\  |  /\  ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁    ▁▁▁▁▁   ▏
▏︺ _|_ ︺▕█████████████    ▏  ▏Cancel  ▏ ▏
▏           ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔    ▔▔▔▔▔   ▏

※ 来源:·水木社区 newsmth.net·[FROM: 211.99.222.*]

本文链接:http://oicu.cc.blog.163.com/blog/static/12303947120091163372228/原文链接:http://www.newsmth.net/bbscon.php?bid=34&id=17370又来陈年老帖了……以前没有工具的时候就喜欢写点批处理来解决问题,特别是在一个没有管理员权限、没有外网网络、没有光驱又封了USB的环境, ③ 勾选 文件 后右键 批量 命名 ④ 右边的选择框中选择前缀 数字 添加 ⑤ start代表开始数,脚本会自动补0 if(start<10) // 补0的好处在于, 文件 夹正序倒叙排列时,会按照最前方 数字 进行排序,不会发生错乱 ⑥ tip代表加在 数字 后方的内容,可留空
使用ren命令 批量 命名 任意 文件 名字时,可以使用 数字 递增 的方式来为 文件 命名 。首先,需要将需要 命名 文件 全部放置在同一 文件 夹中。然后,创建一个.bat 文件 ,可以使用记事本来创建。在.bat 文件 中,可以使用以下命令进行 批量 命名 : @echo off setlocal enabledelayedexpansion set i=1 for %%a in (*.*) do ( set "name=%%~na" set "ext=%%~xa" ren "%%a" "!name!_!i!.!ext!" set /a i+=1 在上述代码中,“*. *”表示该脚本将作用于所有 文件 ,后面的“%%a”将变量设置为 文件 名。通过使用“! Name!”表示 文件 名并排除 数字 部分,“! I!”表示 数字 递增 ,“! Ext!”表示 文件 扩展名。 运行.bat 文件 后,系统会顺序将 文件 以“原 文件 名_ 1.ext”、“原 文件 名_ 2.ext”、“原 文件 名_ 3.ext” …等方式依次 命名