Board logo

标题: 批量将BAT格式文件转成TXT格式(请优化) [打印本页]

作者: Batain     时间: 2008-5-16 19:41    标题: 批量将BAT格式文件转成TXT格式(请优化)

将BAT格式文件批量转成TXT格式(批量改后缀)

功能:将当前目录下的BAT和CMD格式批处理文件,批量转换成TXT格式。
用途:适用于需要将批处理文件转换后放在手机上看TXT电子书,因为文件数量多了手动改比较麻烦,想到用P处理,这是代码:
@echo off
title bat2txt
echo 将当前目录下的BAT文件的后缀都改成TXT
for /f "delims=" %%i in ('dir/b/l/a-d^|findstr ".cmd$"^&dir/b/a-d^|findstr/i ".bat$"') do (
if not "%%~nxi"=="%~nx0" ren "%%~nxi" "%%~ni.txt",2>nul || echo 忽略了对“%%i”的操作,此目录下存在“%%~ni.txt”)
pause
上述代码不简洁,请各位给出更优的方案,尽量代码简洁而且人性化,最好能添加一个转换以后可以恢复成原状的功能,当然再如果有备份的功能更好,希望有高手可以添加一些个性化的功能比如加个进度条并显示进度并显示处理细节,使之更人性化,谢谢!因本人DOS很浅薄,解决小问题都感觉困难。谢谢了。

[ Last edited by Batain on 2008-5-17 at 02:25 PM ]
作者: slore     时间: 2008-5-16 19:52
ren *.cmd *.txt
ren *.bat *.txt
作者: gahoo     时间: 2008-5-16 19:55

ren *.bat *.txt

作者: gahoo     时间: 2008-5-16 19:55
被抢了……
作者: Batain     时间: 2008-5-17 14:30
不好意思,我问题没说清楚,我的意思是需要解决bat2txt的更优化的代码,因为我发这个帖子不是为了仅实现转换,而是为了寻求一些更优化,个性的解决方案,第2,3楼朋友的方法不适用于写成批文件,因为会连自身的后缀都改掉,改不掉的文件还要说明一下原因,不然会造成误会。我希望你们给出功能透明,操作人性化的批文件代码,让大家学习学习。随便什么时候回复,我们都愿意等高手们的方案,但不要仓促地提供不完善的方法。谢谢。

[ Last edited by Batain on 2008-5-17 at 02:38 PM ]
作者: Batain     时间: 2008-5-17 14:43
我看不懂四楼的朋友是什么意思,CN-DOS论坛不是罐水论坛,我们相信大家都会认真看每一个回贴的,并不是只看第一页的回贴,但愿你不要对大家怀有戒备之心。相信我们。你的回答精彩的话我们会收藏的,并且我们会记住你。毕竟这是我在此论坛贴的第一篇帖子,如果没有回帖的话我也很高兴,但是我讨厌看到不负责的回帖。

[ Last edited by Batain on 2008-5-17 at 02:45 PM ]
作者: HAT     时间: 2008-5-17 14:46    标题: 5楼

不是别人的方法不完善,而是你的问题没有描述清楚。
@echo off
for /f "tokens=1* delims=" %%a in ('dir /b *.bat *.cmd') do (
  if "%%a" neq "%0" (
    ren %%a %%~na.txt
  )
)

作者: HAT     时间: 2008-5-17 14:49    标题: 6楼

4楼的朋友是说他想到的方法被2楼抢先一步贴出来了,没有其它意思,楼主不必介意。祝楼主在本论坛学习顺利。
作者: fengzi     时间: 2008-5-17 15:47
楼上的来自重庆?
我是沙平坝的``呵呵``
作者: slore     时间: 2008-5-17 16:02
干嘛放到同一目录……放到父目录
bat里加上路径就可以了
这样简单……

或者…直接注册新的类型…

[ Last edited by slore on 2008-5-17 at 04:08 PM ]
作者: Batain     时间: 2008-5-18 12:34
谢谢你们的真诚!也谢谢7楼那位朋友的方法,同样是dir命令,你用得很简洁灵活,如果后缀名有好多种,可以很方便地添加。另外请问大家刷新文件夹的命令是什么?如果需要改后缀的文件成百上千之多,最好先改一部分再自动刷新一下文件夹然后再改,机器配置低的朋友就不会感觉卡了。。呵呵,谢谢你们!
作者: moniuming     时间: 2008-5-18 14:20
利用PING来暂停一下,每10个暂停几秒
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1* delims=" %%a in ('dir /b *.bat *.cmd') do (
  if "%%a" neq "%0" (
    ren %%a %%~na.txt
    set /a n+=1
    if "!n:~-1!"=="0" ping -n 5 127.1>nul
  )
)

作者: HAT     时间: 2008-5-18 15:54
我一次性改过几千个文件,没发现卡,我觉得这样分批修改反而会影响执行效率。
作者: Batain     时间: 2008-5-19 14:04
呵呵!谢谢你们,12楼的方法很好用,但是我不懂原理,我还不会变量扩展延时,有时间会慢慢去找资料看;还有我发现你们贴出的代码式样都很美观,缩进对齐得很有层次。是用的什么编辑器?还是手动空格或者TAB缩进的?
最近有点忙没时间放在学习上,上网也只是来论坛看一下回复,楼上几位四川重庆的朋友你们家里都平安吧?这次地震听说四川那边的豆腐渣房子太多,现在很多建筑商都会偷工减料的,真没办法。

[ Last edited by Batain on 2008-5-19 at 02:06 PM ]
作者: gahoo     时间: 2008-5-19 17:04
差点被楼主打击积极性了……
我再来一个
if "%1" equ "" exit
cd %1
ren *.cmd *.txt
ren *.bat *.txt
保存成批处理,然后把要批量改名的批处理所在文件夹拖放到这个批处理上,这样就解决自己也被改成txt的问题

注意,路径中不能包含有空格

感觉用for效率还是低了……所以还是直接ren好点

[ Last edited by gahoo on 2008-5-19 at 05:17 PM ]
作者: HAT     时间: 2008-5-19 17:40
直接ren无法满足楼主的需求

  Quote:
第2,3楼朋友的方法不适用于写成批文件,因为会连自身的后缀都改掉


作者: gahoo     时间: 2008-5-19 18:17
注意,后来这个改变了当前路径的,请仔细看清楚"CD %1",不将这个批处理放在目标目录里就不会被改
请先测试一下代码

  Quote:
保存成批处理,然后把要批量改名的批处理所在文件夹拖放到这个批处理上,这样就解决自己也被改成txt的问题

不过我也发现问题了,CD只更改路径,不切换盘符,非C盘的文件夹还是不行,改成pushd即可
if "%1" equ "" exit
pushd %1
ren *.cmd *.txt
ren *.bat *.txt
[ Last edited by gahoo on 2008-5-19 at 06:31 PM ]
作者: HAT     时间: 2008-5-19 18:56
楼主的本意是在当前目录下进行处理,用cd是否违背了楼主的本意呢?
作者: gahoo     时间: 2008-5-19 21:43
嗯,有道理
没仔细看要求
当前目录的话还要把批处理拷来拷去的,挺麻烦的,直接处理目标目录下的文件不更好些么
作者: Batain     时间: 2008-5-25 09:50
谢谢了,一般情况下需要转换的文件都放在同一目录的,所以难得拷贝一两次并不麻烦,能用就行了,总之你们的方法都可以,此贴对我本人来说问题已经解决,不过还是期待会出现更好的方法,同样的期待以后某位高人会发帖子共享出更具创意的方法,呵呵~谢谢你们。
作者: chinaname     时间: 2008-6-2 01:17
发现楼主太酸了,一个REN命令搞定的事,还需要用BAT。
简单的事都被你搞复杂了。
你做的代码也复杂,速度太慢了
明明几句就搞定了
@echo ren *.bat *.txt>>d:\t.bat
@echo ren 1.txt *.bat>>d:\t.bat
@echo del d:\t.bat>>d:\t.bat
d:\t.bat