中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-08 19:57
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎么利用批处理整批改不规则的文件名? 查看 911 回复 12
楼 主 怎么利用批处理整批改不规则的文件名? 发表于 2007-12-27 15:06 ·  中国 湖南 长沙 电信
初级用户
积分 22
发帖 10
注册 2007-12-26 16:41
18年会员
UID 106847
性别 男
状态 离线
如果我有一批文件如下:1231343.jpg,2424252.jpg,6786832.jpg,2342342.jpg,3453453.jpg......
有一个name.txt文件中分别对应了1231343 刘一;2424252 王二;6786832 张三;2342342 李四;3453453 赵五......有没办法利用批处理将这些文件改名为刘一.jpg;王二.jpg;张三.jpg;李四.jpg;赵五.jpg......
哪位高人可以帮下忙,不胜感谢。

[ Last edited by wwhleo on 2007-12-27 at 03:11 PM ]
2 发表于 2007-12-27 16:15 ·  中国 江苏 苏州 移动
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线
放在当前目录下试试
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1*" %%i in (name.txt) do (
for %%c in (%%j) do (set a=%%c
echo !a! >>name1.txt
)
)
for /f "tokens=1,2 delims=;" %%i in (name1.txt) do (
ren "%%j.jpg" "%%i.jpg" 2>nul
del name1.txt /q 2>nul
)
pause

[ Last edited by huahua0919 on 2007-12-27 at 04:34 PM ]
3 发表于 2007-12-27 16:31 ·  中国 湖南 长沙 电信
初级用户
积分 22
发帖 10
注册 2007-12-26 16:41
18年会员
UID 106847
性别 男
状态 离线
试验了一下,虽然没效果,不过非常感激!!
4 发表于 2007-12-27 16:34 ·  中国 江苏 苏州 移动
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线
你的分割符有问题!
;
;
5 发表于 2007-12-27 23:48 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
这样呢?

@echo off
for /f "tokens=1,* " %%i in (name.txt) do (
dir /b /a-d %%i.jpg >nul 2>nul&&ren "%%i.jpg" "%%j.jpg" 2>nul
)
pause


[ Last edited by terse on 2007-12-28 at 11:09 AM ]
简单!简单!再简单!
6 发表于 2007-12-28 05:24 ·  中国 广东 东莞 电信
新手上路
积分 9
发帖 5
注册 2007-07-25 19:41
18年会员
UID 94028
性别 男
状态 离线
路过学习下!!!
7 发表于 2007-12-28 09:10 ·  中国 湖南 长沙 电信
初级用户
积分 22
发帖 10
注册 2007-12-26 16:41
18年会员
UID 106847
性别 男
状态 离线
路上的程序都试验了,没效果,郁闷了。分隔符也改为半角的了
8 发表于 2007-12-28 10:26 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
如果你的 name.txt 内容是:
1231343 刘一;2424252 王二;6786832 张三;2342342 李四;3453453 赵五


感觉第三个效率最高,第二个效率稍低,第一个效率最差
这是测试,请自己修改 echo if exist 部分

一:
@echo off
set n=1
:loop
for /f "tokens=%n% delims=;" %%i in (name.txt) do if not "%%i" == "" call :renname %%i&&goto loop
pause
exit

:renname
set /a n+=1
echo if exist %1.jpg ren %1.jpg %2.jpg
goto :eof


二:
@echo off
set n=1
:loop
for /f "tokens=%n% delims=;" %%i in (name.txt) do (
for /f "tokens=1,2 delims= " %%m in ("%%i") do echo if exist %%m.jpg ren %%m.jpg %%n.jpg
set /a n+=1
if not "%%i" == "" goto loop
)
pause
exit


简化第二个:
@echo off
set n=1
:loop
for /f "tokens=%n% delims=;" %%i in (name.txt) do for /f "tokens=1,2 delims= " %%m in ("%%i") do echo if exist %%m.jpg ren %%m.jpg %%n.jpg&&set /a n+=1&&if not "%%i" == "" goto loop
pause
exit


name.txt多行的不合适这三个

[ Last edited by zh159 on 2007-12-28 at 10:37 AM ]
9 发表于 2007-12-28 10:41 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
多行的试试这个:
1231343 刘一;2424252 王二;6786832 张三;2342342 李四;3453453 赵五
1231343 刘一;2424252 王二;6786832 张三;2342342 李四;3453453 赵五


@echo off
for /f "delims=" %%k in (name.txt) do (
set n=1
set str=%%k
call :loop
)
pause
exit

:loop
for /f "tokens=%n% delims=;" %%i in ("%str%") do for /f "tokens=1,2 delims= " %%m in ("%%i") do echo if exist %%m.jpg ren %%m.jpg %%n.jpg&&set /a n+=1&&if not "%%i" == "" goto loop
goto :eof
10 发表于 2007-12-28 11:10 ·  中国 江苏 常州 武进区 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
原来把name.txt内容看成第一行 001 张三 第二行 002 李四


@echo off
for /f "delims=" %%i in (name.txt) do call :loop "%%i"
pause
goto :eof
:loop
for /f "tokens=1,2* delims=; " %%a in ("%~1") do (
if exist %%a.jpg ren %%a.jpg %%b.jpg
call :loop "%%c"
)


[ Last edited by terse on 2007-12-28 at 11:14 AM ]
简单!简单!再简单!
11 发表于 2007-12-29 12:04 ·  中国 湖南 长沙 电信
初级用户
积分 22
发帖 10
注册 2007-12-26 16:41
18年会员
UID 106847
性别 男
状态 离线
郁闷,怎么文件名还是没修改掉,是不是要在纯DOS方式运行?
12 发表于 2007-12-29 12:07 ·  中国 广西 玉林 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
Originally posted by wwhleo at 2007-12-29 12:04:
郁闷,怎么文件名还是没修改掉,是不是要在纯DOS方式运行?

我在 8 楼已经说了:
echo if exist 部分改为 if exist
8 楼是先给你测试
13 发表于 2007-12-29 12:10 ·  中国 湖南 长沙 电信
初级用户
积分 22
发帖 10
注册 2007-12-26 16:41
18年会员
UID 106847
性别 男
状态 离线
经过试验,10楼的大大的程序可以运行,非常感谢!也感谢各位大大的大力协助!!!
论坛跳转: