批处理之家's Archiver

namejm 发表于 2009-2-12 22:01

[批处理命令一日一教学](8)重命名文件(夹):ren[2009.2.26更新]

[一日一教学]批处理系列帖子索引 [url]http://www.bathome.net/thread-2576-1-1.html[/url]

标题:一日一教学系列8_重命名文件(夹):ren
首发地址:[url=http://bbs.bathome.net/viewthread.php?tid=3318]http://bbs.bathome.net/viewthread.php?tid=3318[/url]
首发日期:2009.2.12
更新日期:2009.2.26

上一篇:删除文件:del [url=http://bbs.bathome.net/viewthread.php?tid=2962]http://bbs.bathome.net/viewthread.php?tid=2962[/url]
下一篇:创建文件夹:md [url=http://bbs.bathome.net/viewthread.php?tid=3319]http://bbs.bathome.net/viewthread.php?tid=3319[/url][url=http://bbs.bathome.net/viewthread.php?tid=2962][color=blue][/color][/url]

  ren取自rename的前三个字母,name在英文中有“为……取名”的意思,而re是前缀,有“重新做某事”的含义,结合起来,rename就是重命名的含义。

  ren 的用法很简单,其使用格式为:ren 旧文件 新文件名。例如,把test.txt改写为abc.txt,使用 ren test.txt abc.txt即可。

  需要注意的是,旧文件可以使用绝对路径,也可以使用相对路径,但是,新文件名不能使用任何路径,只能是新的文件名,即使这个路径就是当前目录。例如:需要修改d:\test\abc.txt这个文件的名字为xyz.txt的话,如果当前路径位于d:\test,那么,命令可以写成:ren abc.txt xyz.txt、ren d:\test\abc.txt xyz.txt,但是,绝对不能写成ren d:\test\abc.txt d:\test\abc.txt这样的格式。之所以会有这个古怪的规定,可能是一旦把路径写成另外的目录,ren就具备了“移动文件+重命名文件”的功能了,这和它的定位不相符。

  虽然ren的用法很简单,但是,它的功能却很强大,这主要得益于ren支持*和?这两个通配符:*表示任意多个字符,?表示一个字符。例如,要把所有的以.txt作为后缀名的文件改为以.doc作为后缀名,使用ren *.txt *.doc 即可,简简单单的一条语句,瞬间就改动了大量的文件,CMD命令简洁而又不失强大的特点在这里体现得淋漓尽致。又例如,要把以abc字符串打头、并且只有5个字符的txt文件改名为以xyz字符串打头,那么,可以这样写:ren abc??.txt xyz??.txt。

  需要引起高度重视的是,ren在使用通配符的时候,它的匹配规则十分奇特且过于复杂,不适合新手理解,在此不再展开做详细的解释。若想了解其中的详情,请参考这篇帖子:这是不是ren的一个bug?[url=http://www.cn-dos.net/forum/viewthread.php?tid=29538]http://www.cn-dos.net/forum/viewthread.php?tid=29538[/url]。若确实需要使用通配符,建议熟读这篇帖子;若实在难以理解,则退而求其次,只用通配符做后缀名的修改工作,可以不用深究这些复杂的规则。

  对于文件夹,ren同样适用。

  ren还有一个十分奇特的属性:当文件具备隐藏属性或系统属性的时候,ren将不起作用,需要把文件的隐藏或系统属性去掉方可更名,对只读属性的文件,ren可顺利更名。这在很多时候给我们制造了很多麻烦:当你不知道要即将更名的文件是否具备隐藏或系统属性的时候,直接ren是很成问题的,;如果希望在重命名文件的时候,还必须保持原有的文件属性,则更加让人痛苦万分。

  怎么办?

  如果不介意文件的属性是否被改动,那么,保险的做法是,用 attrib -s -h 命令先去掉文件可能存在的系统属性或隐藏属性,然后再ren之;如果还要求更名后的文件要保持原有的属性的话,高效的做法是:先用for语句中的 %%~ai 扩展获取原文件的属性,经过处理之后保存到变量中去,然后用 attrib -s -h 去掉文件可能存在的系统属性或隐藏属性,ren之后,再读取保留在变量中的属性值,用 attrib 恢复原有的文件属性。


[color=blue]————————————————————————————[/color]
[color=blue]  感谢tireless在2楼的提醒。[/color]
[color=#0000ff][/color]
[color=#0000ff]  2009.2.26 增添了如何重命名带系统属性或隐藏属性的文件的内容。[/color]

tireless 发表于 2009-2-12 22:29

[quote]又例如,要把以test字符串打头、并且只有6个字符的txt文件改名为以abc字符串打头,那么,可以这样写:ren test??.txt abc??.txt。[/quote]
好像行不通:
[quote]测试文件: test1.txt、test22.txt
执行: ren test??.txt abc??.txt
结果: abct1.txt、abct2.txt[/quote]

[[i] 本帖最后由 tireless 于 2009-2-12 22:31 编辑 [/i]]

namejm 发表于 2009-2-12 22:52

  呵呵,确实弄错了,又忘记了先做测试再正式发代码。其实这个问题以前曾在CN-DOS上有过讨论,你这一提醒我又想起来了,是这篇帖子:这是不是ren的一个bug?[url=http://www.cn-dos.net/forum/viewthread.php?tid=29538&fpage=1&highlight=ren&page=2]http://www.cn-dos.net/forum/viewthread.php?tid=29538[/url]

lockmove 发表于 2009-2-13 19:25

哎,这文章出的太慢了.我以前卡死在 "旧文件可以使用绝对路径,也可以使用相对路径,但是,新文件名不能使用任何路径"  我前后都写了绝对路径,害的我又查不出什么问题.真是郁闷死了

g0147009 发表于 2009-2-19 10:55

删除文件夹怎么删

hgj9999 发表于 2009-2-19 11:33

[quote]原帖由 [i]lockmove[/i] 于 2009-2-13 19:25 发表 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=20922&ptid=3318][img]http://bbs.bathome.net/images/common/back.gif[/img][/url]
哎,这文章出的太慢了.我以前卡死在 "旧文件可以使用绝对路径,也可以使用相对路径,但是,新文件名不能使用任何路径"  我前后都写了绝对路径,害的我又查不出什么问题.真是郁闷死了 [/quote]
其实仔细看一下ren的帮助也可以发出嘛

Renames a file or files.
RENAME [drive:][path]filename1 filename2.
REN [drive:][path]filename1 filename2.
Note that you cannot specify a new drive or path for your destination file.

但是它下面那个Note,说实话觉得不严谨。a new driver or path?
按它上面给出的两行用法,哪怕是当前的路径也是不可以有的

微软的帮助,再次汗一个

whedu 发表于 2009-2-24 13:46

学习完毕,又得点皮毛。

hover521 发表于 2009-7-31 15:46

ren 楼主.txt 很强大.txt    呵呵,写的很生动,学习了!

yettybetty 发表于 2009-9-23 11:25

[quote]原帖由 [i]namejm[/i] 于 12-2-2009 22:52 发表 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=20863&ptid=3318][img]http://bbs.bathome.net/images/common/back.gif[/img][/url]
  呵呵,确实弄错了,又忘记了先做测试再正式发代码。其实这个问题以前曾在CN-DOS上有过讨论,你这一提醒我又想起来了,是这篇帖子:这是不是ren的一个bug?[url=http://www.cn-dos.net/forum/viewthread.php?tid=29538]http://www.cn-dos.net/forum/viewthread.php?tid=29538[/url] [/quote]
这个帖子看不懂 楼主能不能在浅显的讲下?

abeltan 发表于 2009-10-28 11:42

还是楼主讲的易懂,。。。

syqtkj 发表于 2009-12-3 15:54

修改文件名

列如:我想把某目录下的一个文件夹下所有文件夹里的文件,只要文件名字中带有"大家好"字样的文件全部替换成"你们好"
请问大家该如何写批命令,万分感谢!

owenlzb2004 发表于 2009-12-9 09:58

请教一下,我要替换一个字母呢?比如在一个文件夹下,有50个文件名为01.txt 02.txt 03.txt .....049.txt 050.txt 我怎么能够匹配一个字母,批量修改它们的名字呢,去掉所有文件前的那个0

yujihua 发表于 2010-1-9 02:37

回楼上的。

@echo off
for /l %%i in (1 1 4) do ren 0%%i.bat %%i.bat
pause


把这个代码做成BAT放到你要改的那个文件夹里就可以了。

WUYAN520 发表于 2010-9-5 13:40

支持下,嘿嘿,!!!!

rwliubin 发表于 2010-12-30 09:03

回复 13楼 的帖子

说的很好,学习了,谢谢

zyc_213 发表于 2011-5-10 16:06

學習了。。

batxx77 发表于 2011-6-22 13:53

[b] [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=20862&ptid=3318]2#[/url] [i]tireless[/i] [/b]

测试文件: test1.txt、test22.txt
执行: ren test??.txt abc??.txt
结果: abct1.txt、abct2.txt
回复你可以用  abc*.txt啊  abc??.txt 限制了文件名字节

zaixinxiangnian 发表于 2011-8-14 17:23

cn-dos打不开了     哪里还能找到这偏贴子
这是不是ren的一个bug?[url]http://www.cn-dos.net/forum/viewthread.php?tid=29538[/url]

liangdongjuan 发表于 2011-10-26 10:51

必须加后缀名 不然会报系统找不到指定的文件

forfiles 发表于 2012-8-8 18:26

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=114508&ptid=3318]20#[/url] [i]wo4li2wang[/i] [/b]


    del只能删文件,不能删文件夹。删文件夹的命令是rd

zzpsongs 发表于 2012-8-8 22:05

[i=s] 本帖最后由 zzpsongs 于 2012-8-9 11:24 编辑 [/i]

[quote]  呵呵,确实弄错了,又忘记了先做测试再正式发代码。其实这个问题以前曾在CN-DOS上有过讨论,你这一提醒 ...
[size=2][color=#999999]namejm 发表于 2009-2-12 22:52[/color] [url=http://www.bathome.net/redirect.php?goto=findpost&pid=20863&ptid=3318][img]http://www.bathome.net/images/common/back.gif[/img][/url][/size][/quote]


    链接打不开了;另外,经过测试,我整理出关于?的特性

前提:"?"表示1个字符的说法有误,应该表示0~1个字符;

推论一:“旧文件名”中“?”的个数限制了未知字符的最大数目,
比如:[code]ren test??.txt abc??.txt[/code]表示匹配“旧文件名”是以test开头的,并且后方可以多出0~2个字符的文件(后缀名不算),那么test123.txt 就不匹配了

推论二:“新文件名”中的“?”的个数限制了“新文件名”中允许保持的对应未知字符的最大数目,
比如:
存在一个文件是test123.txt,接着执行下面的命令[code]ren test????.txt abc??.txt[/code]匹配到test123.txt了,那么从第一个字符开始命名为“新文件名”,于是“tes”替换为“abc”,由于新文件名格式中abc后面是??,那么改名后,“abc”后允许保留原来“tes”后面两个字符,即是“t1”了,最后就是abct1.txt了

望指教!

狗屁不通 发表于 2012-8-18 15:07

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=114575&ptid=3318]22#[/url] [i]zzpsongs[/i] [/b]


    链接打不开 可以Google 看缓存   
看缓存可以在[url]http://www.jidaili.com/[/url]输入网址看

hankfernandez 发表于 2012-12-23 16:02

不错,对于?替代符又有了更深入的了解,原来以为只代表一个字符呢,确实应该是0~1个。

hero1997 发表于 2014-12-23 12:56

http://www.cn-dos.net/forum/viewthread.php?tid=29538。
链接没打开,不知道是今天打不开,还是再也打不开了

cjiabing 发表于 2014-12-23 21:21

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=159518&ptid=3318]25#[/url] [i]hero1997[/i] [/b]


    确实打不开了,cn-dos估计要寿终正寝了

wrsbj 发表于 2015-1-2 15:00

学习了学习了学习了

kiramario 发表于 2015-12-10 23:19

说的很好,学习了,谢谢

bakatu 发表于 2017-4-27 11:05

...看到这里评论就只有2页了...感谢楼主

yangfresh 发表于 2019-6-12 17:35

这是不是ren的一个bug?http://www.cn-dos.net/forum/viewthread.php?tid=29538
网页打不开了?

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.