中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何为多个子目录中的txt批量改文件扩展名.
<   <<   [1] [2]  >>
作者:
标题: 如何为多个子目录中的txt批量改文件扩展名. 上一主题 | 下一主题
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 16 楼』:  

哦。刚才看了一下生成的bpx 文件。发现了出问题的原因 呵呵。不好意思。。 这个代码只经过了echo 测试。。。 没有注意到 ren的语法问题。。 @echo off & SETLOCAL EnableDelayedExpansion dir /b /s *.txt>1.pxp set FileEx= for /f "tokens=* " %%i in (1.pxp) do ( set FileEx=%%i set FileEx=!FileEx:~0,-4! ren "!FileEx!.txt" "*.pxp" ) pause 现在好了。


2007-3-31 09:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
xswdong
中级用户





积分 216
发帖 129
注册 2007-2-14
状态 离线
『第 17 楼』:  

set FileEx=!FileEx:~0,-4! 这里的! 什么意思 ~0,-4 是从0开始忘左第4个字符吗? 请给解答


2007-3-31 11:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 18 楼』:  

@echo off for /r %%a in (*.txt) do ren %%~nxa %%~na.c pause


2007-3-31 12:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 19 楼』:  

Originally posted by xswdong at 2007-3-31 11:06 AM: set FileEx=!FileEx:~0,-4! 这里的! 什么意思 ,-4 是从0开始忘左第4个字符吗? 请给解答
启用了变量延迟,%FileEx 必须写成 !FileEx ~0是指偏移量为0,从第一个开始提取变量FileEx的所有字符,除了最后四位。


2007-3-31 12:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 20 楼』:  

Originally posted by bjsh at 2007-3-30 08:18 AM: flyinspace的作息时间怎么黑白颠倒啊????
没办法。 忙的时候忙。。只有这个时间才有空来瞧瞧。。 能够帮忙的就顺手写咯。




知,不觉多。不知,乃求知
2007-3-31 16:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zzhh612
中级用户




积分 278
发帖 103
注册 2006-10-21
状态 离线
『第 21 楼』:  flyinspace真是牛!!!

我的要求达到了,考虑到能通用性,反过来将.C转为.TXT. 则需要改为如下: @echo off & SETLOCAL EnableDelayedExpansion dir /b /s *.c>temp.pxp set FileEx= for /f "tokens=* " %%i in (temp.pxp) do ( set FileEx=%%i set FileEx=!FileEx:~0,-2! ren "!FileEx!.c" "*.txt" ) del temp.pxp pause 不过从简洁的角度出发,我偏向于wudixin96的思路. 当需要反过来转换时,只需要把扩展名参数颠倒一下就行了. [ Last edited by zzhh612 on 2007-4-1 at 12:29 AM ]


2007-3-31 23:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 22 楼』:  

我来简化下代码
  1. @echo off
  2. for /f "tokens=1 delims=." %%i in ('dir /b /s *.txt') do ren "%%i.txt" "*.c"
  3. pause
BJSH发表于: 2007-03-31 11:08
[ Last edited by bjsh on 2007-3-31 at 11:18 AM ]


2007-4-1 00:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zzhh612
中级用户




积分 278
发帖 103
注册 2006-10-21
状态 离线
『第 23 楼』:  wudixin96的代码的改进.

@echo off for /r %%a in (*.txt) do ren %%~nxa %%~na.c pause 这个代码不能找到子目录中的文件.原因如下: %%a是包含了完整路径的文件名. %%~nxa 只能表示一个文件名+护展名,执行ren时,会提示找不到文件的路径 ren %%~nxa %%~na.c 相当于执行的是:ren *.txt *.c 这只针对当前目录. 所以第二句应为:for /r 路径 %%a in (*.txt) do ren %%a %%~na.c 相当于执行:ren 路径\*.txt *.c


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


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



论坛跳转: