|
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
状态 离线
|
|
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 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
|
2008-3-28 13:35 |
|
|
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
状态 离线
|
|
2008-3-28 14:03 |
|
|
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 |
|