Board logo

标题: 怎么利用批处理整批改不规则的文件名? [打印本页]

作者: wwhleo     时间: 2007-12-27 15:06    标题: 怎么利用批处理整批改不规则的文件名?
如果我有一批文件如下: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 ]

作者: huahua0919     时间: 2007-12-27 16:15
放在当前目录下试试
@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 ]

作者: wwhleo     时间: 2007-12-27 16:31
试验了一下,虽然没效果,不过非常感激!!

作者: huahua0919     时间: 2007-12-27 16:34
你的分割符有问题!
;
;

作者: terse     时间: 2007-12-27 23:48
这样呢?

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

作者: renzhen     时间: 2007-12-28 05:24
路过学习下!!!

作者: wwhleo     时间: 2007-12-28 09:10
路上的程序都试验了,没效果,郁闷了。分隔符也改为半角的了

作者: zh159     时间: 2007-12-28 10:26
如果你的 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 ]

作者: zh159     时间: 2007-12-28 10:41
多行的试试这个:
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

作者: terse     时间: 2007-12-28 11:10
原来把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 ]

作者: wwhleo     时间: 2007-12-29 12:04
郁闷,怎么文件名还是没修改掉,是不是要在纯DOS方式运行?

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

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

作者: wwhleo     时间: 2007-12-29 12:10
经过试验,10楼的大大的程序可以运行,非常感谢!也感谢各位大大的大力协助!!!