Board logo

标题: 这些文件怎么批量改名 [打印本页]

作者: RAC     时间: 2007-3-14 02:29    标题: 这些文件怎么批量改名

[LY]恶魔在身边01[国语].D-vb.rmvb.rmvb
[LY]恶魔在身边02[国语].D-vb.rmvb.rmvb
[LY]恶魔在身边03[国语].D-vb.rmvb.rmvb
[LY]恶魔在身边04[国语].D-vb.rmvb.rmvb
[LY]恶魔在身边05[国语].D-vb.rmvb.rmvb
[LY]恶魔在身边06[国语].D-vb.rmvb.rmvb
[LY]恶魔在身边07[国语].D-vb.rmvb.rmvb
[LY]恶魔在身边08[国语].D-vb.rmvb.rmvb
[LY]恶魔在身边09[国语].D-vb.rmvb.rmvb
[LY]恶魔在身边10[国语].D-vb.rmvb.rmvb
[LY]恶魔在身边11[国语].D-vb.rmvb.rmvb
[LY]恶魔在身边12[国语].D-vb.rmvb.rmvb
[LY]恶魔在身边13[国语].D-vb.rmvb.rmvb
[LY]恶魔在身边14[国语].D-vb.rmvb.rmvb
[LY]恶魔在身边15[国语].D-vb.rmvb.rmvb
[LY]恶魔在身边16[国语].D-vb.rmvb.rmvb
[LY]恶魔在身边17[国语].D-vb.rmvb.rmvb
[LY]恶魔在身边18[国语].D-vb.rmvb.rmvb
[LY]恶魔在身边19[国语].D-vb.rmvb.rmvb
[LY]恶魔在身边20[国语].D-vb.rmvb.rmvb

想把多余的去掉。改成01.rmvb 02.rmvb.....
请教了。~
作者: lxmxn     时间: 2007-3-14 03:32
  将此批处理保存为Pren.bat,放在要改名的文件所在的目录,运行。代码未测试,有问题请跟贴讨论。
@Echo Off&SetLocal ENABLEDELAYEDEXPANSION
FOR /F "delims=" %%a in ('dir /b/a-d *.rmvb') do (
    set "name=%%a"
    set "name=!name:[LY]恶魔在身边=!"
    set "name=!name:[国语].D-vb.rmvb=!"
    ren "%%a" "!name!"
)
pause&exit/b

作者: ccwan     时间: 2007-3-14 03:47
我也来一段代码
@Echo Off&SetLocal ENABLEDELAYEDEXPANSION
FOR /F "delims=" %%a in ('dir /b/a-d *.rmvb') do (
    set var=%%a
    set str=!var:~9,2!
    ren "!var!" "!str!%%~xa"
)
pause&exit/b
[ Last edited by ccwan on 2007-3-14 at 05:07 AM ]
作者: RAC     时间: 2007-3-14 04:42


  Quote:
Originally posted by lxmxn at 2007-3-14 03:32:
  将此批处理保存为Pren.bat,放在要改名的文件所在的目录,运行。代码未测试,有问题请跟贴讨论。[code]
@Echo Off&SetLocal ENABLEDELAY ...

谢谢兄台的回复。
可我要的不是你这个,不具通用性哦。

我下了很多电影。命名规则都差不多。上面贴出来的是其中的一点。
所以想要个通用的
作者: RAC     时间: 2007-3-14 04:43


  Quote:
Originally posted by ccwan at 2007-3-14 03:47:
我也来一段代码
[code]@Echo Off&SetLocal ENABLEDELAYEDEXPANSION
FOR /F "delims=" %%a in ('dir /b/a-d *.rmvb') do (
    set var=%%a
    set str=!var:~9,2!
    ren "!var ...

这位兄台写的好。不过怎么运行了以后会多出个点来。。。
这样子的16..rmvb
作者: ccwan     时间: 2007-3-14 05:06
"!str!.%%~xa"改成"!str!%%~xa"就行啦
作者: RAC     时间: 2007-3-14 05:22
非常感谢。。不过,对代码看的不太明白。。
实在是太菜了
作者: RAC     时间: 2007-3-14 05:25
看懂了。ccwan兄台,你这个也没有通用性。。。
并不是所有的文件名都是这样长的。
作者: ccwan     时间: 2007-3-14 05:27
其实没有多少技术含量的啦,只有for循环、变量延迟和变量字符的截取而已。
不必气馁,多看看论坛里的相关帖子,慢慢就会明白也会使用啦。
作者: ccwan     时间: 2007-3-14 05:33


  Quote:
Originally posted by RAC at 2007-3-14 05:25:
看懂了。ccwan兄台,你这个也没有通用性。。。
并不是所有的文件名都是这样长的。

你的文件名称长度不固定,我的代码就要修改;内容不固定,lxmxn的代码就修改成你的文件名中的字符嘛。
这就看你自己的灵活运用啦,哪有代码放之四海而皆准的?
lxmxn兄的代码也很好,你要根据实际情况使用啊!
作者: RAC     时间: 2007-3-14 05:42
也只好这样了。谢谢你们了啊
作者: ccwan     时间: 2007-3-14 06:42
发现排序问题不能完美解决,所以还要再测试.

[ Last edited by ccwan on 2007-3-14 at 06:48 AM ]
作者: RAC     时间: 2007-3-14 07:05
ccwan兄

辛苦了~~~
吃饭~~~呵呵
作者: lxmxn     时间: 2007-3-14 07:17

  把你的所有电影的文件名列表发出来看看?

作者: RAC     时间: 2007-3-14 07:18
我找到解决办法了
建立一个文本。把01 02 03。。。这些数字先写到文本里.

for /f %%i in (test.txt) do for /f "tokens=*" %%a in ('dir /b *.rmvb ^|find "%%i"') do ren "%%a" %%i.rmvb
作者: lxmxn     时间: 2007-3-14 07:21

  这个没有出现错误吗?

作者: RAC     时间: 2007-3-14 07:23


  Quote:
Originally posted by lxmxn at 2007-3-14 07:21:

  这个没有出现错误吗?

没有啊。只是文本是从01写到100。如果没有那么多集数,要浪费点时间。
不知道怎么解决。

Microsoft Windows [版本 5.2.3790]
(C) 版权所有 1985-2003 Microsoft Corp.

D:\>cd sr

D:\sr>r

D:\sr>for /F %i in (test.txt) do for /F "tokens=*" %a in ('dir /b *.rmvb |fin
%i"') do ren "%a" %i.rmvb

D:\sr>for /F "tokens=*" %a in ('dir /b *.rmvb |find "01"') do ren "%a" 01.rmv

D:\sr>ren "[LY]恶魔在身边01[国语].D-vb.rmvb.rmvb" 01.rmvb

D:\sr>for /F "tokens=*" %a in ('dir /b *.rmvb |find "02"') do ren "%a" 02.rmv

D:\sr>ren "[LY]恶魔在身边02[国语].D-vb.rmvb.rmvb" 02.rmvb

[ Last edited by RAC on 2007-3-14 at 07:26 AM ]
作者: lxmxn     时间: 2007-3-14 07:26

  如果电影名中有一个是包含“101”,那么可能就会出错,应该find可能会同时匹配“01”和“101”,这样改名就混乱了。

作者: RAC     时间: 2007-3-14 07:29
是啊。
不过超过一百集的电影不多。呵呵
你们不从BT上下电影吧?
做电影网站经常从BT上下电影的。下下来的电影名字不规范,不好添加。天天要改。麻烦。所以才想用批处理解决啊
作者: lxmxn     时间: 2007-3-14 07:35

  Re RAC:
  
  我一般不下载电影什么的,顶多下载一点好的软件。

  如果你的电影文件名有规律的话,超过100个也是可以解决的。

作者: RAC     时间: 2007-3-14 07:38
规律就是这样啊
[LY]恶魔在身边01[国语].D-vb.rmvb
都有电影的集数。
作者: lxmxn     时间: 2007-3-14 08:50

  如果是你这样的规律,我2楼的代码应该可行。

作者: oilio     时间: 2007-3-14 09:57
呵呵,我才发现学完命令后,其实思路有的时候也非常重要,只有好的根基加上好的想法,才能写出来好的东西,我想不光是批处理,其它的编程应该也是这样,可惜没有学过编程,这辈子是很难往那儿发展啦。今天又有所领悟,多看一些别人写的对自己还是很有帮忙的。谢谢各位的批处理。
作者: RAC     时间: 2007-3-14 10:34
哈。跑我的贴子来加分了。
你加我也加。。。。
作者: everest79     时间: 2007-3-14 10:44

SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=*" %%i in ('dir /o:n /b *.rmvb') do (
set /a aaa+=1
if !aaa! leq 9 (set bbb=0!aaa!) else (set bbb=!aaa!)
ren %%i.rmvb !bbb!.nmvb
)
ren *.nmvb *.rmvb
[ Last edited by everest79 on 2007-3-14 at 02:58 AM ]
作者: lxmxn     时间: 2007-3-14 10:54

  楼上的变量延迟掉了吧。

作者: everest79     时间: 2007-3-14 13:22
我直接打的,也没测试,就省了一句,嘻嘻
作者: lxmxn     时间: 2007-3-14 13:38

  不打算修改过来啊?

作者: everest79     时间: 2007-3-14 15:58
改了哇
作者: nc4485     时间: 2007-7-14 12:09


  Quote:
Originally posted by everest79 at 2007-3-14 03:44 AM:
[code]
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=*" %%i in ('dir /o:n /b *.rmvb') do (
set /a aaa+=1
if !aaa! leq 9 (set bbb=0!aaa!) else (set bbb=!aaa!)
ren %%i.rmvb !bbb!.nmvb ...

学习了,不过如果中间正好少了一集,就会乱了,还是觉得15楼好
作者: blue812     时间: 2007-7-28 15:35
楼主建议你下载个软件,很好用.名字叫《拖把更名器》
作者: zlg029wyc027     时间: 2007-7-30 14:42
不太理解?
作者: 6622186     时间: 2007-7-30 23:33
用 dir 生成文件列表, 再用 for 来读取 ,用 set /a 来增值, 用if 来判断

set 的替换也不错
作者: jianghuren     时间: 2007-7-30 23:50
这个搞一个GWBASIC.的程序不是更简单,为啥要学DOS命令FOR搞循环这么麻烦呢?不直观,可读性真差,不好记容易出错
你先用DIR *.* >1.txt 把所有要改的文件名输出到1.txt
当然1.txt稍稍编辑一下,无关的几行(不多)删了
然后用BASIC读入1.txt中的文件名,用字符串函数处理 最后再输出
具体复杂的,我写不出来,怕嘛烦呀 ,我太懒,呵呵
比如 旧文件名赋给变量OLDNAME$ 新文件名NEWNAME$
最后就用一条语句
SHELL "REN "+OLDNAME$+" "+NEWNAME$
执行就改过来了
用一个循环结构或条件判断就可以改所有文件名字了
BASIC还是强大的相对于DOS的FOR不是同一量级的,而且直观不易出错,没用GWBASIC用QBASIC也一样,这个还是DOS自带的呢,没必要学习繁复的FOR命令了
个人意见,仅供参考
作者: jianghuren     时间: 2007-7-30 23:51
QBASIC不知道有没有SHELL命令,但是至少应该能实现相同功能
作者: 99122524     时间: 2008-5-9 20:43    标题: 文件名修改问题

请教:如何将当前目录下的所有TXT文件按 1.txt 2.txt 3.txt …… 重命名