标题: 如何为多个子目录中的txt批量改文件扩展名.
[打印本页]
作者: zzhh612
时间: 2007-3-30 13:04
标题: 如何为多个子目录中的txt批量改文件扩展名.
在一个目录下的若干个子目录中有许多以文本方式保存的C代码.
我怎样才能用一个批处理将这些以TXT为扩展名的代码文档变成以.C为扩展名的C源文件.
[
Last edited by zzhh612 on 2007-3-31 at 01:48 AM ]
作者: flyinspace
时间: 2007-3-30 13:14
哦。很简单啊。。
作者: flyinspace
时间: 2007-3-30 13:16
@echo off
dir /b /a *.txt>1.txt
for /f "tokens=1,2 delims=. " %%i in (1.txt) do ren %%i.txt %%i.c
作者: MagiCube
时间: 2007-3-30 13:31
在XP下面,用命令ren *.txt *.c就可以把当前目录下所有.txt文件重命名为.c文件啦
初来乍到,看到这里很多高手,很多复杂的语法还不懂,像这个应该没有必要用复杂的方法吧
作者: flyinspace
时间: 2007-3-30 13:32
呵呵,头脑发昏了。
作者: zzhh612
时间: 2007-3-30 13:43
不知flyinspace
试过了没有.目录列表应用dir /b /s才对.这样可以把文件名写入1.txt,但在执行重命名文件时,会提示找不到文件的路径.兄弟的代码怕是需要改进吧.也许思路是对的.
我想用批处理解决的原因是文本存在于多个不同级数的子目录下,单用命令REN来做很是麻烦的,当然WINDOWS下有批量改名的软件,我是想在实践中学一学批处理.不能总只靠一种方法来解决问题吧.
[
Last edited by zzhh612 on 2007-3-30 at 01:51 PM ]
作者: MagiCube
时间: 2007-3-30 14:00
有理
作者: flyinspace
时间: 2007-3-30 14:08
呵,都说过了呀。
没有注意的。。。
忘记加几个参数了。
还有那个名字可以随便写的。
不一定是.txt
随便写个。fly也行啊。
作者: flyinspace
时间: 2007-3-30 14:10
试过了没有.目录列表应用dir /b /s才对.这样可以把文件名写入1.txt,但在执行重命名文件时,会提示找不到文件的路径.兄弟的代码怕是需要改进吧.也许思路是对的.
??
不是吧?
这个dir /b /s是可以随便写的。。
写dir /s /b都一样。。
作者: flyinspace
时间: 2007-3-30 14:13
噢。开始你的要求里面没有子目录的。
就没有加上 /s参数。
作者: flyinspace
时间: 2007-3-30 14:15
@echo off
dir /b /a /s *.txt>1.bpx
for /f "tokens=1,2 delims=. " %%i in (1.bpx) do ren %%i.txt %%i.c
加/a参数是为了防止有隐藏文件的出现。
作者: zzhh612
时间: 2007-3-30 14:48
flyinspace的代码在执行时仍会提示系统找不到文件.
没有能改名,只有根目录下的被改了,
我自己得来的,试过了还行
@echo off
FOR /R c:\test %%a IN (*.txt) DO (ren %%a %%~na.c)
pause
只是文件名不能有逗号,当然这本来也不规范,所以也没有想法来包括它了,如果非要包括进来,也只有高手来解决了..
[
Last edited by zzhh612 on 2007-3-30 at 02:57 PM ]
作者: flyinspace
时间: 2007-3-30 15:06
哦。我自己试过了啊?
所有的目录下的文件都可以更改?
要想最规范的话。还要加上不少判断的语句。
但你想要麻烦么?
作者: bjsh
时间: 2007-3-30 21:18
flyinspace的作息时间怎么黑白颠倒啊????
作者: zzhh612
时间: 2007-3-31 01:39
flyinspace的代码在执行时仍会提示系统找不到文件.
所有子目录下的TXT文件一个也没有改.
不知你是怎样运行成功的.
作者: flyinspace
时间: 2007-3-31 09:11
哦。刚才看了一下生成的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
现在好了。
作者: xswdong
时间: 2007-3-31 11:06
set FileEx=!FileEx:~0,-4!
这里的! 什么意思 ~0,-4 是从0开始忘左第4个字符吗? 请给解答
作者: wudixin96
时间: 2007-3-31 12:29
@echo off
for /r %%a in (*.txt) do ren %%~nxa %%~na.c
pause
作者: wudixin96
时间: 2007-3-31 12:38
Quote: |
Originally posted by xswdong at 2007-3-31 11:06 AM:
set FileEx=!FileEx:~0,-4!
这里的! 什么意思 ,-4 是从0开始忘左第4个字符吗? 请给解答 |
|
启用了变量延迟,%FileEx 必须写成 !FileEx
~0是指偏移量为0,从第一个开始提取变量FileEx的所有字符,除了最后四位。
作者: flyinspace
时间: 2007-3-31 16:24
Quote: |
Originally posted by bjsh at 2007-3-30 08:18 AM:
flyinspace的作息时间怎么黑白颠倒啊???? |
|
没办法。
忙的时候忙。。只有这个时间才有空来瞧瞧。。
能够帮忙的就顺手写咯。
作者: zzhh612
时间: 2007-3-31 23:34
标题: 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 ]
作者: bjsh
时间: 2007-4-1 00:09
我来简化下代码
Quote: |
- @echo off
- for /f "tokens=1 delims=." %%i in ('dir /b /s *.txt') do ren "%%i.txt" "*.c"
- pause
BJSH发表于: 2007-03-31 11:08 |
|
[
Last edited by bjsh on 2007-3-31 at 11:18 AM ]
作者: zzhh612
时间: 2007-4-1 00:22
标题: 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