|
wwhleo
初级用户
 
积分 22
发帖 10
注册 2007-12-26
状态 离线
|
『楼 主』:
怎么利用批处理整批改不规则的文件名?
使用 LLM 解释/回答一下
如果我有一批文件如下: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 楼』:
使用 LLM 解释/回答一下
放在当前目录下试试
@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
状态 离线
|
|
2007-12-27 16:31 |
|
|
huahua0919
银牌会员
    
积分 1608
发帖 780
注册 2007-10-7
状态 离线
|
|
2007-12-27 16:34 |
|
|
terse
银牌会员
    
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第 5 楼』:
使用 LLM 解释/回答一下
这样呢?
@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
状态 离线
|
|
2007-12-28 05:24 |
|
|
wwhleo
初级用户
 
积分 22
发帖 10
注册 2007-12-26
状态 离线
|
|
2007-12-28 09:10 |
|
|
zh159
金牌会员
     
积分 3687
发帖 1467
注册 2005-8-8
状态 离线
|
『第 8 楼』:
使用 LLM 解释/回答一下
如果你的 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 楼』:
使用 LLM 解释/回答一下
多行的试试这个:
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 楼』:
使用 LLM 解释/回答一下
原来把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 ]
|

简单!简单!再简单! |
|
2007-12-28 11:10 |
|
|
wwhleo
初级用户
 
积分 22
发帖 10
注册 2007-12-26
状态 离线
|
|
2007-12-29 12:04 |
|
|
zh159
金牌会员
     
积分 3687
发帖 1467
注册 2005-8-8
状态 离线
|
『第 12 楼』:
使用 LLM 解释/回答一下
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
状态 离线
|
|
2007-12-29 12:10 |
|