中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 06:20
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何为多个子目录中的txt批量改文件扩展名.
16 发表于 2007-03-31 09:11 ·  中国 广东 广州 联通
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
UID 82819
性别 男
状态 离线
哦。刚才看了一下生成的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

现在好了。
17 发表于 2007-03-31 11:06 ·  中国 黑龙江 牡丹江 电信
中级用户
★★
积分 216
发帖 129
注册 2007-02-14 07:26
UID 79469
性别 男
状态 离线
set FileEx=!FileEx:~0,-4!
这里的! 什么意思 ~0,-4 是从0开始忘左第4个字符吗? 请给解答
18 发表于 2007-03-31 12:29 ·  中国 浙江 杭州 拱墅区 电信
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
UID 75624
性别 男
状态 离线
@echo off
for /r %%a in (*.txt) do ren %%~nxa %%~na.c
pause
19 发表于 2007-03-31 12:38 ·  中国 浙江 杭州 拱墅区 电信
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
UID 75624
性别 男
状态 离线
Originally posted by xswdong at 2007-3-31 11:06 AM:
set FileEx=!FileEx:~0,-4!
这里的! 什么意思 ,-4 是从0开始忘左第4个字符吗? 请给解答


启用了变量延迟,%FileEx 必须写成 !FileEx
~0是指偏移量为0,从第一个开始提取变量FileEx的所有字符,除了最后四位。
20 发表于 2007-03-31 16:24 ·  中国 广东 广州 联通
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
UID 82819
性别 男
状态 离线
Originally posted by bjsh at 2007-3-30 08:18 AM:
flyinspace的作息时间怎么黑白颠倒啊????

没办法。

忙的时候忙。。只有这个时间才有空来瞧瞧。。

能够帮忙的就顺手写咯。
知,不觉多。不知,乃求知
21 flyinspace真是牛!!! 发表于 2007-03-31 23:34 ·  中国 四川 遂宁 电信
中级用户
★★
积分 278
发帖 103
注册 2006-10-21 21:08
UID 67562
性别 男
状态 离线
我的要求达到了,考虑到能通用性,反过来将.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 ]
22 发表于 2007-04-01 00:09 ·  中国 浙江 杭州 华数宽带
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
UID 75212
性别 男
状态 离线
我来简化下代码



  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 ]
23 wudixin96的代码的改进. 发表于 2007-04-01 00:22 ·  中国 四川 遂宁 电信
中级用户
★★
积分 278
发帖 103
注册 2006-10-21 21:08
UID 67562
性别 男
状态 离线
@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
论坛跳转: