无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6439|回复: 19
打印 上一主题 下一主题

请批处理高手帮我做一个文件夹中文件批量重命名的批处理,谢谢!

[复制链接]
跳转到指定楼层
1#
发表于 2009-8-8 02:35:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
做电子书的时候经常用的上,某文件夹中有许多*.txt文件,现在首先判断这些txt文件首行是否是空行,如果不是空行提取第一行内容作为本文件的文件名,如果是空行,继续判断下一行,也是提取为文件名!哪位高手给解个惑!谢谢了!!!
2#
 楼主| 发表于 2009-8-8 18:52:28 | 只看该作者
没有高手愿意回答吗?
回复

使用道具 举报

3#
发表于 2009-8-8 20:41:22 | 只看该作者
for /r %%i in (*.txt) do (
        for /f "delims=" %%a in (%%i) do (
        if not "%%a"=="" move "%%i" "%%a.txt" &&goto :eof
        )

)

訸到目录下,执行...
回复

使用道具 举报

4#
 楼主| 发表于 2009-8-8 22:57:26 | 只看该作者
哥们儿谢谢了!最好能解释一下!
回复

使用道具 举报

5#
 楼主| 发表于 2009-8-8 23:41:43 | 只看该作者
:eof
是不是一个标签啊?怎么没看见啊?
回复

使用道具 举报

6#
 楼主| 发表于 2009-8-9 20:13:51 | 只看该作者
哥们回家试了一下不行啊!这只是关键代码?麻烦来个全的吧!
回复

使用道具 举报

7#
发表于 2009-8-10 18:14:45 | 只看该作者
自己不会,帮楼主继续顶一下。
回复

使用道具 举报

8#
 楼主| 发表于 2009-8-10 22:13:24 | 只看该作者
难道没人会吗?应该不是很难吧?
回复

使用道具 举报

9#
 楼主| 发表于 2009-8-10 22:14:23 | 只看该作者
斑竹们呢?都干什么去了?
回复

使用道具 举报

10#
发表于 2009-8-10 23:10:39 | 只看该作者
@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 编辑 ]
回复

使用道具 举报

11#
发表于 2009-8-10 23:14:01 | 只看该作者
以上代码的效果是

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

这个应该是楼主的要求

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

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

@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 编辑 ]
回复

使用道具 举报

12#
 楼主| 发表于 2009-8-10 23:48:33 | 只看该作者
谢谢楼上的!明天试一下!能不能解释一下啊?授之以渔嘛!
回复

使用道具 举报

13#
发表于 2009-8-10 23:54:48 | 只看该作者
就这几行,如果你看不懂的话,我还真不知道怎么解释
都是最基础的语句
写不出代码不奇怪,但是如果这几行看不懂的话
只能看基础教程了
http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1

主要看参考for 那段

至于dir的/b参数是为了去掉多余的信息,只要文件名
回复

使用道具 举报

14#
 楼主| 发表于 2009-8-13 00:09:42 | 只看该作者
貌似不能用,可别说我不会做*.bat文件啊!
回复

使用道具 举报

15#
发表于 2009-8-13 01:04:37 | 只看该作者
不可能不能用的,我测试过了的,没任何问题

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

不过有一点,这个只能在cmd窗口的环境下运行,如果在纯dos下应该不行,因为纯dos好像不能用括号括起多个命令行
回复

使用道具 举报

16#
 楼主| 发表于 2009-8-13 05:34:12 | 只看该作者
我再笨也不可能连批处理文件都不会做啊!
把所有代码(包括那些括号)复制到文本文件,并改后缀为.bat放到txt文件所在的目录执行,环境windows xp cmd应该没有问题吧?夜班,今天回家再试一下!谢谢!你也上夜班吗?
回复

使用道具 举报

17#
 楼主| 发表于 2009-8-14 06:28:43 | 只看该作者
找到原因了!三楼的代码也完全可以使用,原来我测试的那个文件夹是系统隐藏属性!取消隐藏后就可以了!谢谢两位!
回复

使用道具 举报

18#
发表于 2009-8-24 21:00:02 | 只看该作者
这个批处理确实很实用
回复

使用道具 举报

19#
发表于 2009-8-25 23:24:58 | 只看该作者
3楼的是高手啊,我都不知道 goto :eof 原来可以用在for里面,相当于vb的exit for
回复

使用道具 举报

20#
发表于 2009-8-28 20:31:25 | 只看该作者
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 编辑 ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-16 07:30

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表