中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 修改文件名前缀的问题 上一主题 | 下一主题
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『楼 主』:  修改文件名前缀的问题

我想批量修改文件名前缀要求如下
原文件名a.txt  b.txt  ll.txt  sds.txt..................有很多
要求:原文件名不变只是在后面加上序号如: a1.txt b2.txt ll3.txt sds4.txt.........[/
size]

2006-12-24 03:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  


  将此批处理和要处理的文件放在同一个文件夹里面,运行这个批处理即可。
@echo off&setlocal EnableDelayedExpansion
set a=1
for /f "delims=" %%i in ('dir /a-d/b/s') do (
        if not "%%~ni"=="%~n0" (
        ren "%%i" "%%~ni!a!%%~xi"
        set/a a+=1
        )
)


   此帖被 +7 点积分      点击查看详情   
评分人:【 ccwan 分数: +5  时间:2006-12-24 04:12
评分人:【 26933062 分数: +2  时间:2006-12-24 04:20


2006-12-24 04:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 3 楼』:  

  这个序号是按照什么规律加上去的?按照原文件名的字母升序排列依次加的吗?



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-24 04:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 4 楼』:  另一个



  Quote:
Originally posted by 26933062 at 2006-12-23 14:45:
我想批量修改文件名前缀要求如下
原文件名a.txt  b.txt  ll.txt  sds.txt..................有很多
要求:原文件名不变只是在后面加上序号如: a[ ...

ren.bat
@ echo off
set s=1
dir /b >>filename.txt  :: 将文件名提取

for /f "eol=; delims=.txt," %%a in (filename.txt) do (

(ren %%a.txt %%a%s%.txt )

set /a s+=1
)

pause >nul

刚才看错了
注意这个不能处理空格,哪位帮忙改一下?

[ Last edited by scriptor on 2006-12-23 at 03:26 PM ]

2006-12-24 04:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 5 楼』:  

厉害,太谢谢了,以后多跟你学习.能解释一下红字部分吗?再次谢谢
@echo off&setlocal EnableDelayedExpansion
set a=1
for /f "delims=" %%i in ('dir /a-d/b/s *.txt') do (
        if not "%%~ni"=="%~n0" (
        ren "%%i" "%%~ni!a!%%~xi"
        set/a a+=1
        )
)

[ Last edited by 26933062 on 2006-12-23 at 03:58 PM ]

2006-12-24 04:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 6 楼』:  

大意是如果文件名不是自身(批处理)名称
即不修改自身名称



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2006-12-24 04:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 7 楼』:  

『第 6 楼』:  



不过同一个文件夹里有很多的其他的文件,它照改不误,我改写了以下,让它只针对某类文件:

@echo off&setlocal EnableDelayedExpansion
dir | find ".txt" >name.txt
set a=1
for /f "delims=" %%i in (name.txt) do (
        if not "%%~ni"=="%~n0" (
        ren "%%i" "%%~ni!a!%%~xi"
        set/a a+=1
        )
)


set/a a+=1 好象不起作用啊??

2006-12-24 04:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 8 楼』:  


  4楼这个局限性太大了。


2006-12-24 04:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 9 楼』:  

  7楼的代码也并非只针对某一类型的文件,如果文件名取得很特别,它简直就是任何类型通吃呢——只要文件名或后缀名中含有 .txt 都可以,根本原因在于 find 查找字符串的时候,并不能控制字符串出现的位置。

  要针对某种类型的文件,最简洁的还是用 dir 命令,在2楼的基础上稍微改造一下就可以了,比如改成 dir /a-d/b/s *.txt。

   此帖被 +5 点积分      点击查看详情   
评分人:【 ccwan 分数: +5  时间:2006-12-24 05:07




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-24 04:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 10 楼』:  狂谢

呵呵

我的机器上不能通过
set /a a+=1

怎么回事?

2006-12-24 05:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 11 楼』:  


@echo off&setlocal EnableDelayedExpansion
dir | find ".txt" >name.txt
set a=1
for /f "tokens=4 delims= " %%i in (name.txt) do (
        if not "%%~ni"=="%~n0" (
        ren "%%i" "%%~ni!a!%%~xi"
        set/a a+=1
        )
)




三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2006-12-24 05:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 12 楼』:  

你的  dir | find ".txt" >name.txt  命令,生成的name.txt里有空格,以你的代码,会忽略空格后的内容



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2006-12-24 05:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 13 楼』:  帮忙改正吧



  Quote:
Originally posted by ccwan at 2006-12-23 16:20:
你的  dir | find ".txt" >name.txt  命令,生成的name.txt里有空格,以你的代码,会忽略空格后的内容

我也不知道怎么改, 帮忙改一下吧!
谢了

2006-12-24 05:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 14 楼』:  

11楼???



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2006-12-24 05:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 15 楼』:  


  上面的 dir | find ".txt" >name.txt 换成 dir /b/a-d *.txt>name.txt 或者 dir /a-d/b|findstr /i ".vbs$" >name.txt的效果应该是一样的。


2006-12-24 08:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: