中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎么利用批处理整批改不规则的文件名?
作者:
标题: 怎么利用批处理整批改不规则的文件名? 上一主题 | 下一主题
wwhleo
初级用户





积分 22
发帖 10
注册 2007-12-26
状态 离线
『楼 主』:  怎么利用批处理整批改不规则的文件名?

如果我有一批文件如下: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 ]

2007-12-27 15:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




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

放在当前目录下试试
@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 ]

2007-12-27 16:15
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
wwhleo
初级用户





积分 22
发帖 10
注册 2007-12-26
状态 离线
『第 3 楼』:  

试验了一下,虽然没效果,不过非常感激!!

2007-12-27 16:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




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

你的分割符有问题!
;
;

2007-12-27 16:34
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 5 楼』:  

这样呢?

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



简单!简单!再简单!
2007-12-27 23:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
renzhen
新手上路





积分 9
发帖 5
注册 2007-7-25
状态 离线
『第 6 楼』:  

路过学习下!!!

2007-12-28 05:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wwhleo
初级用户





积分 22
发帖 10
注册 2007-12-26
状态 离线
『第 7 楼』:  

路上的程序都试验了,没效果,郁闷了。分隔符也改为半角的了

2007-12-28 09:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 8 楼』:  

如果你的 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 ]



2007-12-28 10:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 9 楼』:  

多行的试试这个:
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




2007-12-28 10:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 10 楼』:  

原来把name.txt内容看成第一行 001  张三  第二行 002  李四

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



简单!简单!再简单!
2007-12-28 11:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wwhleo
初级用户





积分 22
发帖 10
注册 2007-12-26
状态 离线
『第 11 楼』:  

郁闷,怎么文件名还是没修改掉,是不是要在纯DOS方式运行?

2007-12-29 12:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by wwhleo at 2007-12-29 12:04:
郁闷,怎么文件名还是没修改掉,是不是要在纯DOS方式运行?

我在 8 楼已经说了:
echo if exist 部分改为 if exist
8 楼是先给你测试



2007-12-29 12:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wwhleo
初级用户





积分 22
发帖 10
注册 2007-12-26
状态 离线
『第 13 楼』:  

经过试验,10楼的大大的程序可以运行,非常感谢!也感谢各位大大的大力协助!!!

2007-12-29 12:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: