[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理怎样批量提取TXT文件第一行对文件进行改名?

如题,一个目录下有大量TXT文件,文件名可能是1.txt, 2.txt ,3.txt……  每个TXT文件的内容格式如下:

这是文件标题这是文件标题

这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容。


现在想把每个TXT文件改名,即用每个TXT文件的第一行内容作为标题,同时删除内容中的第一行和第二行空行,处理后TXT文件内容变成:

这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容这是文件内容。


请问批处理该怎么写呢

[ 本帖最后由 zxzl 于 2010-6-21 23:57 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

回复 26# 73yexs4f8qzk

这句代码不好理解啊:
    set /p NewName=<"%%a"

我的理解是NewName这个变量得到的是%%a代表的txt文件的全部内容。可是在下一句中:
more +2 "!OldName!" > "!NewName!.txt"
从这里句代码来看的话,NewName这个变量应该是%%a代表的文本文件中第一行的内容啊。可是没有看到有一句从%%a中提取第一行内容的代码啊?
有没有谁能理解这句代码,帮我解释一下,谢谢!

TOP

回复 26# 73yexs4f8qzk


    真的太巧妙了!佩服!

TOP

26楼的代码可以实现这个功能了,谢谢各位兄弟

TOP

回复 25楼 的帖子

能否把你的数据更新到顶楼?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. @echo off
  2. for /f "delims=" %%a in ('dir /a:-d /b *.txt') do (
  3.     set OldName=%%a
  4.     set /p NewName=<"%%a"
  5.     SetLocal EnableDelayedExpansion
  6.     more +2 "!OldName!" > "!NewName!.txt"
  7.     EndLocal
  8.     del /a /f "%%a"
  9. )
复制代码
1

评分人数

TOP

不能全部处理,而且有错误提示,你可以试一下

TOP

原帖由 zxzl 于 2010-6-21 15:41 发表
感谢楼上,不过还是有点问题,您可以新建几个文件试一下

什么问题?

TOP

感谢楼上,不过还是有点问题,您可以新建几个文件试一下

TOP

翻阅老帖,看来可以用VBS解决批处理遇到的问题,哈哈,放心了O(∩_∩)O~
  1. set fso=createobject("scripting.filesystemobject")
  2. set fd=fso.getfolder(".")
  3. fpath=fd.path
  4. set fo=fso.getfolder(fpath)
  5. set fc=fo.files
  6. for each f in fc
  7.     ext=f.type
  8.     if ext="文本文档" then
  9.         strtext=""
  10.         set rfile=fso.opentextfile(f)
  11.         fname=rfile.readline
  12.         rfile.skipline
  13.         do until rfile.atendofstream=true
  14.             strline=rfile.readline
  15.             strtext=strtext&strline&vbcrlf
  16.         loop
  17.         rfile.close
  18.         set wfile=fso.opentextfile(f,2)
  19.         wfile.write strtext
  20.         wfile.close
  21.         newname=fname&".txt"
  22.         f.name=newname
  23.     end if
  24. next
复制代码
如果txt文件较多,可能会等待几秒

[ 本帖最后由 BowAngel 于 2010-6-21 15:28 编辑 ]

TOP

可以用VBS实现楼主所要的结果,但不知道在这个版块发VBS代码是不是不太合适。。。。。。

TOP

原帖由 hanyeguxing 于 2010-6-18 11:58 发表
@echo off
for %%a in (*.txt) do (
   setlocal enabledelayedexpansion
   (for /F "usebackq delims=" %%b in ("%%a") do (
      if defined b (echo.%%b) else set "a=%%b"
      set b==
   ))>$
   re ...


在我机子上我用这段代码测试了一下,发现并不能完成楼主需要的功能,提示“存在一个重名文件,或是找不到文件”,不知是怎么回事。

TOP

回复 17楼 的帖子

能否把其中一个文件用附件的形式传上来看看?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

难道是你文本编码的问题?
努力学习,努力挣分

TOP

偶真的很郁闷,楼上诸位高手给出的代码为什么没有一个可以成功运行的?

TOP

返回列表