标题: [文件操作] [已解决]批处理把一批文件改名为指定的一个文本文件的每行内容 [打印本页]
作者: guanjinman 时间: 2010-5-25 21:08 标题: [已解决]批处理把一批文件改名为指定的一个文本文件的每行内容
比如D盘下有连续剧100个文件:test001.rmvb、test002.rmvb ... test100.rmvb
现在有个文本文件test.txt有100行,每行内容类似 test001q.rmvb test002w.rmvb ... test100sdf.rmvb(数字后面无规则)
打算把连续剧每个文件名用文本文件的每行替换,批处理怎么写?
[ 本帖最后由 guanjinman 于 2010-5-26 05:26 编辑 ]
作者: hanyeguxing 时间: 2010-5-25 21:51
原帖由 guanjinman 于 2010-5-25 21:08 发表
比如D盘下有连续剧100个文件:test001.rmvb、test002.rmvb ... test100.rmvb
现在有个文本文件test.txt有100行,每行内容类似 test001q.rmvb test002w.rmvb ... test100sdf.rmvb(数字后面无规则)
打算把连续剧每个文件名用文本文件的每行替换,批处理怎么写?
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (test.txt) do set/a a+=1&set n=00!a!&ren "test!n:~-3!.rmvb" "%%a"
复制代码
[ 本帖最后由 hanyeguxing 于 2010-5-25 21:53 编辑 ]
作者: guanjinman 时间: 2010-5-26 00:30
非常佩服高手啊!2句代码就搞定了
刚刚忘了给文件名序号了,现在名字改了都按照拼音排列了,怎么加上序号(比如文本文件中第13行,对应文件名前加上013)?
自己当初如果把 ren "test!n:~-3!.rmvb" "%%a" 改成 ren "test!n:~-3!.rmvb" "!n:~-3!%%a" 就有序号了 现在怎么补救?能不能撤销改名,等改下代码后再改名?
[ 本帖最后由 guanjinman 于 2010-5-26 00:36 编辑 ]
作者: sgaizxt001 时间: 2010-5-26 00:39
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (*.rmvb) do set/a a+=1&set n=00!a!&ren "%%a" "!n:~-3!%%a"
- endlocal
复制代码
时间紧迫,我没测试哦,如果你的test1.rmvb是新建的测试文件,那么可以用我这个代码测试看看。
[ 本帖最后由 sgaizxt001 于 2010-5-26 00:40 编辑 ]
作者: guanjinman 时间: 2010-5-26 01:04 标题: 回复 4楼 的帖子
经测试 补救无效,执行和没执行一样
作者: hanyeguxing 时间: 2010-5-26 01:18 标题: 回复 5楼 的帖子
如果想要执行ren "test!n:~-3!.rmvb" "%%a"
结果执行了ren "test!n:~-3!.rmvb" "!n:~-3!%%a"
则可以:- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (test.txt) do set/a a+=1&set n=00!a!&ren "!n:~-3!%%a" "%%a"
复制代码
也可以:- @echo off&setlocal enabledelayedexpansion
- for %%a in (*.rmvb) do set a=%%a&ren "%%a" "!a:~3!"
复制代码
[ 本帖最后由 hanyeguxing 于 2010-5-26 01:22 编辑 ]
作者: guanjinman 时间: 2010-5-26 03:29 标题: 回复 6楼 的帖子
测试过也不行
还是具体说明一下
现在有4个文件test001.rmvb、test002.rmvb、test003.rmvb、test004.rmvb
test.txt内容:
----------------------
c.rmvb
d.rmvb
a.rmvb
b.rmvb
----------------------
自己希望改名后是001c.rmvb、002d.rmvb、003a.rmvb、004a.rmvb,但是忘了加上序列号直接执行2楼代码变成了
a.rmvb(test003)
b.rmvb(test004)
c.rmvb(test001)
d.rmvb(test002)
现在要么撤销改名,要么加上希望的序列号,怎么加呢?自己的想法:把文件名和文件中的每行对比,如果哪行对上就提取那行的序列加在文件名前,比如a.rmvb在文本文件中排在第三,那么就把003加在a.rmvb前变成003a.rmvb,就是不知道怎么写?
作者: sgaizxt001 时间: 2010-5-26 03:41
如果已经改过了就这样- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1* delims=:" %%a in ('findstr /n .* test.txt') do (
- set str=000%%a
- ren "%%b" !str:~-3!%%b
- )
- endlocal
复制代码
如果是从初始状态开始就这样:- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1* delims=:" %%a in ('findstr /n .* test.txt') do (
- for %%i in (*.rmvb) do (
- set str=000%%a
- ren %%i !str:~-3!%%b
- )
- )
- endlocal
复制代码
[ 本帖最后由 sgaizxt001 于 2010-5-26 03:44 编辑 ]
作者: guanjinman 时间: 2010-5-26 05:24 标题: 回复 8楼 的帖子
谢谢高手,终于搞定!后来发现您这个补救办法对含有空格的文件名无效,后来去掉空格后OK!
作者: sgaizxt001 时间: 2010-5-26 05:39
对空格无效是因为我没用引号括起来,我没有想到你的文件名有空格。。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |