Board logo

标题: [文件操作] [已解决]批处理把一批文件改名为指定的一个文本文件的每行内容 [打印本页]

作者: 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(数字后面无规则)

打算把连续剧每个文件名用文本文件的每行替换,批处理怎么写?
  1. @echo off&setlocal enabledelayedexpansion
  2. 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

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (*.rmvb) do set/a a+=1&set n=00!a!&ren  "%%a" "!n:~-3!%%a"
  3. 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"
则可以:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (test.txt) do set/a a+=1&set n=00!a!&ren "!n:~-3!%%a" "%%a"
复制代码
也可以:
  1. @echo off&setlocal enabledelayedexpansion
  2. 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

如果已经改过了就这样
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=:" %%a in ('findstr /n .* test.txt') do (
  3.    set str=000%%a
  4.    ren "%%b" !str:~-3!%%b
  5. )
  6. endlocal
复制代码
如果是从初始状态开始就这样:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=:" %%a in ('findstr /n .* test.txt') do (
  3.    for %%i in (*.rmvb) do (
  4.       set str=000%%a
  5.       ren %%i !str:~-3!%%b
  6. )
  7. )
  8. 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