[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

比如D盘下有连续剧100个文件:test001.rmvb、test002.rmvb ... test100.rmvb

现在有个文本文件test.txt有100行,每行内容类似         test001q.rmvb test002w.rmvb ... test100sdf.rmvb(数字后面无规则)

打算把连续剧每个文件名用文本文件的每行替换,批处理怎么写?

[ 本帖最后由 guanjinman 于 2010-5-26 05:26 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

原帖由 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 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

非常佩服高手啊!2句代码就搞定了

刚刚忘了给文件名序号了,现在名字改了都按照拼音排列了,怎么加上序号(比如文本文件中第13行,对应文件名前加上013)?

自己当初如果把 ren "test!n:~-3!.rmvb" "%%a" 改成 ren "test!n:~-3!.rmvb" "!n:~-3!%%a" 就有序号了 现在怎么补救?能不能撤销改名,等改下代码后再改名?

[ 本帖最后由 guanjinman 于 2010-5-26 00:36 编辑 ]

TOP

  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 编辑 ]
努力学习,努力挣分

TOP

回复 4楼 的帖子

经测试 补救无效,执行和没执行一样

TOP

回复 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 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

回复 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,就是不知道怎么写?

TOP

如果已经改过了就这样
  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 编辑 ]
1

评分人数

努力学习,努力挣分

TOP

回复 8楼 的帖子

谢谢高手,终于搞定!后来发现您这个补救办法对含有空格的文件名无效,后来去掉空格后OK!

TOP

对空格无效是因为我没用引号括起来,我没有想到你的文件名有空格。。
努力学习,努力挣分

TOP

返回列表