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

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

[复制链接]
发表于 2010-6-19 12:07:50 | 显示全部楼层
原帖由 sgaizxt001 于 2010-6-19 05:39 发表
为什么不直接
more +2 "!wjm!">"!num!.txt"
del /q "%%a"
可以不用临时文件吧。


是哦,看来我最近脑袋短路的厉害啊~
 楼主| 发表于 2010-6-19 14:41:14 | 显示全部楼层
偶真的很郁闷,楼上诸位高手给出的代码为什么没有一个可以成功运行的?
发表于 2010-6-19 20:28:04 | 显示全部楼层
难道是你文本编码的问题?
发表于 2010-6-19 21:08:21 | 显示全部楼层

回复 17楼 的帖子

能否把其中一个文件用附件的形式传上来看看?
发表于 2010-6-20 12:23:57 | 显示全部楼层
原帖由 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 ...


在我机子上我用这段代码测试了一下,发现并不能完成楼主需要的功能,提示“存在一个重名文件,或是找不到文件”,不知是怎么回事。
发表于 2010-6-21 13:01:52 | 显示全部楼层
可以用VBS实现楼主所要的结果,但不知道在这个版块发VBS代码是不是不太合适。。。。。。
发表于 2010-6-21 15:23:16 | 显示全部楼层
翻阅老帖,看来可以用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 编辑 ]
 楼主| 发表于 2010-6-21 15:41:55 | 显示全部楼层
感谢楼上,不过还是有点问题,您可以新建几个文件试一下
发表于 2010-6-21 15:57:51 | 显示全部楼层
原帖由 zxzl 于 2010-6-21 15:41 发表
感谢楼上,不过还是有点问题,您可以新建几个文件试一下

什么问题?
 楼主| 发表于 2010-6-21 16:26:04 | 显示全部楼层
不能全部处理,而且有错误提示,你可以试一下
发表于 2010-6-21 19:49:11 | 显示全部楼层
  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. )
复制代码

评分

参与人数 1PB +5 收起 理由
Batcher + 5 乐于助人

查看全部评分

发表于 2010-6-21 20:33:13 | 显示全部楼层

回复 25楼 的帖子

能否把你的数据更新到顶楼?
 楼主| 发表于 2010-6-21 23:56:55 | 显示全部楼层
26楼的代码可以实现这个功能了,谢谢各位兄弟
发表于 2013-8-23 17:05:50 | 显示全部楼层
回复 26# 73yexs4f8qzk


    真的太巧妙了!佩服!
发表于 2013-8-23 17:20:38 | 显示全部楼层
回复 26# 73yexs4f8qzk

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

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

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 13:55 , Processed in 0.019498 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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