中国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] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: