![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-08 00:35 |
共 48,041 主题排行 / 350,128 发帖 / 今日 3 篇 / 48,253 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已解决]求大侠写一批量重命名代码 |
| 可打印版本 2,537 / 38 |
| 第1楼 hulongzhuo | 发表于 2008-03-28 12:04 |
| 中级用户 发帖 135 积分 294 | |
|
[已解决]求大侠写一批量重命名代码 求高手写一P处理: 批量重命名
现有文件夹A,该文件夹下全为.JPG格式图像文件,其名字格式均为: 0_6870-7912_071109_173933_2734.jpg 0_6870-7912_071109_173935_2735.jpg 0_6870-7912_071109_173938_2736.jpg ......| | | | | | | | | | | | 1 2 3 4 现要求将竖线指明的第3列数字加1,同样的第4列数字也加1,前面的第1. 2列保持不变, 如将文件 0_6870-7912_071109_173933_2734.jpg 重命名后变为: 0_6870-7912_071109_173934_2735.jpg 依此类推,将全部文件重命名. 望大侠贴个代码,在此先谢过了!!!!! 不好意思,本人的确忽略了一个很重要的问题,忘了说明了,还存在有以0开头的那种, 比如: 0_6870-7912_071109_085109_0273.jpg 0_6870-7912_071109_085112_0274.jpg 0_6870-7912_071109_085115_0275.jpg 这样的情况,第3和第4列是以0开头的了,那么运行就会出错了,说进制不对,该怎么办呢? 并且要改名以后位数不能变动哦,比如最后是4位就得是4位!! 以下是BAT代码: =============================================== @echo off for /f "tokens=1-5 delims=._" %%a in ('dir /b *.jpg') do (call :111 %%a %%b %%c %%d %%e) ren *.jpp *.jpg pause exit :111 set d=%4 set e=%5 :222 if %d:~0,1%==0 (set d=%d:~1% &goto 222) set /a d+=1 set d=000000%d% set d=%d:~-6% :333 if %e:~0,1%==0 (set e=%e:~1% &goto 333) set /a e+=1 set e=0000%e% set e=%e:~-4% ren %1_%2_%3_%4_%5.jpg %1_%2_%3_%d%_%e%.jpp ============================================== 以下是VBS代码: ============================================== Dim fso, f, fd, arr, path path="." Set fso = CreateObject("Scripting.FileSystemObject") Set fd = fso.GetFolder(path) for each f in fd.files if lcase(right(f,3))="jpg" then arr=split(fso.getbasename(f),"_") len3=len(arr(3)):len4=len(arr(4)) arr(3)=arr(3)+1:arr(3)="0000"&arr(3) arr(4)=arr(4)+1:arr(4)="0000"&arr(4) f.name = arr(0)&"_"&arr(1)&"_"&arr(2)&"_"&right(arr(3),len3)&"_"&right(arr(4),len4)&".jpg" end if next set fd = nothing set fso = nothing ============================================== [ Last edited by hulongzhuo on 2008-3-28 at 05:07 PM ] |
|
| 第2楼 hulongzhuo | 发表于 2008-03-28 12:09 |
| 中级用户 发帖 135 积分 294 | |
|
自已先顶一下了~~~~
在线求答!! |
|
| 第3楼 huahua0919 | 发表于 2008-03-28 12:24 |
| 银牌会员 发帖 780 积分 1,608 | |
| 第4楼 hulongzhuo | 发表于 2008-03-28 12:37 |
| 中级用户 发帖 135 积分 294 | |
|
先谢过3楼的大侠!
另外,我怎么指明路径啊? 比如将A文件夹放在 D:\A ,要怎么加入上面的代码啊? |
|
| 第5楼 huahua0919 | 发表于 2008-03-28 12:39 |
| 银牌会员 发帖 780 积分 1,608 | |
|
'dir/b d:\A\*.jpg'
|
|
| 第6楼 hulongzhuo | 发表于 2008-03-28 12:47 |
| 中级用户 发帖 135 积分 294 | |
|
回复huahua0919
代码没有成功执行, 闪了一下就没反应了,是什么原因呢??? |
|
| 第7楼 huahua0919 | 发表于 2008-03-28 12:53 |
| 银牌会员 发帖 780 积分 1,608 | |
|
闪过后,看文件有没改掉
|
|
| 第8楼 hulongzhuo | 发表于 2008-03-28 13:01 |
| 中级用户 发帖 135 积分 294 | |
|
没有改变,
'dir/b d:\A\*.jpg' 这句话好像不行哦 |
|
| 第9楼 huahua0919 | 发表于 2008-03-28 13:05 |
| 银牌会员 发帖 780 积分 1,608 | |
|
检查你路径有没空格 有的话 加dir/b "d:\A\*.jpg"
|
|
| 第10楼 hulongzhuo | 发表于 2008-03-28 13:12 |
| 中级用户 发帖 135 积分 294 | |
|
@echo off&&setlocal enabledelayedexpansion
d: cd a for /f "delims=" %%i in ('dir /b "d:\a\*.jpg"') do ( for /f "delims=_. tokens=1,2,3,4,5" %%a in ("%%i") do ( set x=%%d set y=%%e set/a x+=1 set/a y+=1 ren %%i %%a_%%b_%%c_!x!_!y!.jpg) ) 执行后是有反应了,但是第3.4列没有按要求去变化,位数都变得不对了,很乱,好像是没有正确计算一样的.. [ Last edited by hulongzhuo on 2008-3-28 at 03:16 PM ] |
|
| 第11楼 bat-zw | 发表于 2008-03-28 13:30 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
试了下,还只能分两次来: 假设有10个这样的文件
[ Last edited by zw19750516 on 2008-3-28 at 01:37 PM ] |
|
| 第12楼 bat-zw | 发表于 2008-03-28 13:35 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
晕,我理解错了,不好意思
|
|
| 第13楼 26933062 | 发表于 2008-03-28 13:52 |
| 银牌会员 发帖 879 积分 2,268 | |
| 第14楼 bat-zw | 发表于 2008-03-28 14:03 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
也可直接进入路径: 在前面加上:
cd\ d: cd a |
|
| 第15楼 hulongzhuo | 发表于 2008-03-28 14:41 |
| 中级用户 发帖 135 积分 294 | |
|
13楼的兄弟,,执行后这样的提示:
无效数字。数字常数只能是十进制(17),十六位进制(0x11)或 八进制(021)。 系统找不到指定的文件。 [ Last edited by hulongzhuo on 2008-3-28 at 03:11 PM ] |
|
| 1 2 3 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |