无忧启动论坛

标题: 请批处理高手帮我做一个文件夹中文件批量重命名的批处理,谢谢! [打印本页]

作者: zhongtian1552    时间: 2009-8-8 02:35
标题: 请批处理高手帮我做一个文件夹中文件批量重命名的批处理,谢谢!
做电子书的时候经常用的上,某文件夹中有许多*.txt文件,现在首先判断这些txt文件首行是否是空行,如果不是空行提取第一行内容作为本文件的文件名,如果是空行,继续判断下一行,也是提取为文件名!哪位高手给解个惑!谢谢了!!!
作者: zhongtian1552    时间: 2009-8-8 18:52
没有高手愿意回答吗?
作者: junyee    时间: 2009-8-8 20:41
for /r %%i in (*.txt) do (
        for /f "delims=" %%a in (%%i) do (
        if not "%%a"=="" move "%%i" "%%a.txt" &&goto :eof
        )

)

訸到目录下,执行...
作者: zhongtian1552    时间: 2009-8-8 22:57
哥们儿谢谢了!最好能解释一下!
作者: zhongtian1552    时间: 2009-8-8 23:41
:eof
是不是一个标签啊?怎么没看见啊?
作者: zhongtian1552    时间: 2009-8-9 20:13
哥们回家试了一下不行啊!这只是关键代码?麻烦来个全的吧!
作者: niweiping    时间: 2009-8-10 18:14
自己不会,帮楼主继续顶一下。
作者: zhongtian1552    时间: 2009-8-10 22:13
难道没人会吗?应该不是很难吧?
作者: zhongtian1552    时间: 2009-8-10 22:14
斑竹们呢?都干什么去了?
作者: NicTense    时间: 2009-8-10 23:10
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b *.txt') do (
set n=
for /f "delims=" %%j in (%%i) do (
  if "!n!"=="" ren "%%i" "%%j.txt"
  set n=found
)
)

[ 本帖最后由 NicTense 于 2009-8-10 23:19 编辑 ]
作者: NicTense    时间: 2009-8-10 23:14
以上代码的效果是

以第一个非空行的内容为文件名,如果文件无内容,则保留原来的文件名

这个应该是楼主的要求

不过如果第一行很长的话,那文件名也会很长的,而且如果第一行包含空格,则改好的文件名也会包含空格

如果希望,当第一行包含空格(指第一行的文字中间的空格,不包括两侧的无用空格),则以第一段文字,而非整行作为文件名,则代码改为如下

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b *.txt') do (
set n=
for /f %%j in (%%i) do (
  if "!n!"=="" ren "%%i" "%%j.txt"
  set n=found
)
)

[ 本帖最后由 NicTense 于 2009-8-10 23:24 编辑 ]
作者: zhongtian1552    时间: 2009-8-10 23:48
谢谢楼上的!明天试一下!能不能解释一下啊?授之以渔嘛!
作者: NicTense    时间: 2009-8-10 23:54
就这几行,如果你看不懂的话,我还真不知道怎么解释
都是最基础的语句
写不出代码不奇怪,但是如果这几行看不懂的话
只能看基础教程了
http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1

主要看参考for 那段

至于dir的/b参数是为了去掉多余的信息,只要文件名
作者: zhongtian1552    时间: 2009-8-13 00:09
貌似不能用,可别说我不会做*.bat文件啊!
作者: NicTense    时间: 2009-8-13 01:04
不可能不能用的,我测试过了的,没任何问题

把所有代码(包括那些括号)复制到文本文件,并改后缀为.bat或者.cmd,放到你的txt文件所在的目录执行就可以了

不过有一点,这个只能在cmd窗口的环境下运行,如果在纯dos下应该不行,因为纯dos好像不能用括号括起多个命令行
作者: zhongtian1552    时间: 2009-8-13 05:34
我再笨也不可能连批处理文件都不会做啊!
把所有代码(包括那些括号)复制到文本文件,并改后缀为.bat放到txt文件所在的目录执行,环境windows xp cmd应该没有问题吧?夜班,今天回家再试一下!谢谢!你也上夜班吗?
作者: zhongtian1552    时间: 2009-8-14 06:28
找到原因了!三楼的代码也完全可以使用,原来我测试的那个文件夹是系统隐藏属性!取消隐藏后就可以了!谢谢两位!
作者: singods    时间: 2009-8-24 21:00
这个批处理确实很实用
作者: NicTense    时间: 2009-8-25 23:24
3楼的是高手啊,我都不知道 goto :eof 原来可以用在for里面,相当于vb的exit for
作者: rangelee    时间: 2009-8-28 20:31
for /r %%i in (*.txt) do (                      / / 把目录下所有的TXT文件名存入变量I中

        for /f "delims=" %%a in (%%i) do (                  //  打开变量I代表的TXT文件,以行的方式读取TXT的内容,并把内容存入变量A中
        if not "%%a"=="" move "%%i" "%%a.txt" &&goto :eof          //如果变量A代表的内容不为空的话,就把变量I代表的文件名改为变量A代表的内容,并且退出循环
        )

)


:EOF 的含义是代表文件结尾

[ 本帖最后由 rangelee 于 2009-8-28 20:33 编辑 ]




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3