中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]求大侠写一批量重命名代码
<<   [1] [2] [3]  >>   >
作者:
标题: [已解决]求大侠写一批量重命名代码 上一主题 | 下一主题
hulongzhuo
中级用户




积分 294
发帖 135
注册 2007-3-9
状态 离线
『楼 主』:  [已解决]求大侠写一批量重命名代码

求高手写一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 ]


2008-3-28 12:04
查看资料  发短消息  网志   编辑帖子  回复  引用回复
hulongzhuo
中级用户




积分 294
发帖 135
注册 2007-3-9
状态 离线
『第 2 楼』:  

自已先顶一下了~~~~ 在线求答!!


2008-3-28 12:09
查看资料  发短消息  网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 3 楼』:  

@echo off&&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir/b *.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)
)


2008-3-28 12:24
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
hulongzhuo
中级用户




积分 294
发帖 135
注册 2007-3-9
状态 离线
『第 4 楼』:  

先谢过3楼的大侠! 另外,我怎么指明路径啊? 比如将A文件夹放在 D:\A ,要怎么加入上面的代码啊?


2008-3-28 12:37
查看资料  发短消息  网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 5 楼』:  

'dir/b d:\A\*.jpg'


2008-3-28 12:39
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
hulongzhuo
中级用户




积分 294
发帖 135
注册 2007-3-9
状态 离线
『第 6 楼』:  

回复huahua0919 代码没有成功执行, 闪了一下就没反应了,是什么原因呢???


2008-3-28 12:47
查看资料  发短消息  网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 7 楼』:  

闪过后,看文件有没改掉


2008-3-28 12:53
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
hulongzhuo
中级用户




积分 294
发帖 135
注册 2007-3-9
状态 离线
『第 8 楼』:  

没有改变, 'dir/b d:\A\*.jpg' 这句话好像不行哦


2008-3-28 13:01
查看资料  发短消息  网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 9 楼』:  

检查你路径有没空格 有的话 加dir/b "d:\A\*.jpg"


2008-3-28 13:05
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
hulongzhuo
中级用户




积分 294
发帖 135
注册 2007-3-9
状态 离线
『第 10 楼』:  

@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 ]


2008-3-28 13:12
查看资料  发短消息  网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 11 楼』:  试了下,还只能分两次来:

假设有10个这样的文件
@echo off
for /l %%a in (0,1,9) do call :ren1 %%a
for /l %%a in (0,1,9) do call :ren2 %%a
del a.txt&goto :eof
:ren1
dir /b | more +%1 >a.txt
set /p b=<a.txt
ren %b% %b:0_6870-7912_071109_17393=0_68170-7912_0711109_173913%&goto :eof
:ren2
dir /b | more +%1 >a.txt
set /p b=<a.txt
ren %b% %b:273=2713%&goto :eof
[ Last edited by zw19750516 on 2008-3-28 at 01:37 PM ]




批处理之家新域名:www.bathome.net
2008-3-28 13:30
查看资料  发送邮件  发短消息  网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 12 楼』:  

晕,我理解错了,不好意思




批处理之家新域名:www.bathome.net
2008-3-28 13:35
查看资料  发送邮件  发短消息  网志  OICQ (841615149)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 13 楼』:  

@echo off&&setlocal enabledelayedexpansion
:: 这里是路径。
set "lj=d:\a"
for /f "delims=" %%i in ('dir/b "%lj%\*.jpg"') do (
  for /f "tokens=1-5 delims=_." %%a in ("%%i") do (
    set /a x=%%d+1,y=%%e+1
    ren "%lj%\%%~nxi" "%%a_%%b_%%c_!x!_!y!.jpg"
))
pause




致精致简!
2008-3-28 13:52
查看资料  发短消息  网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 14 楼』:  也可直接进入路径:

在前面加上: cd\ d: cd a




批处理之家新域名:www.bathome.net
2008-3-28 14:03
查看资料  发送邮件  发短消息  网志  OICQ (841615149)  编辑帖子  回复  引用回复
hulongzhuo
中级用户




积分 294
发帖 135
注册 2007-3-9
状态 离线
『第 15 楼』:  

13楼的兄弟,,执行后这样的提示: 无效数字。数字常数只能是十进制(17),十六位进制(0x11)或 八进制(021)。 系统找不到指定的文件。 [ Last edited by hulongzhuo on 2008-3-28 at 03:11 PM ]


2008-3-28 14:41
查看资料  发短消息  网志   编辑帖子  回复  引用回复
<<   [1] [2] [3]  >>   >
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: