Board logo

标题: [文本处理] 批处理如何将文本内指定的信息内容导出来? [打印本页]

作者: saogz    时间: 2012-9-24 11:23     标题: 批处理如何将文本内指定的信息内容导出来?

各位好!
     本机有一些文件!内容如下!
     如1.txt 的内容:
  1. ------------------------------------------------------------------------
  2. r865 | zhaoxiang | 2012-09-22 16:55:51 +0800 (星期六, 2012-09-22) | 2 行
  3. 已审核
  4. QC:11905
  5. ------------------------------------------------------------------------
复制代码
2.txt的内容是:
  1. ------------------------------------------------------------------------
  2. r705 | tangsz | 2012-09-21 11:23:35 +0800 (星期五, 2012-09-21) | 1 行
  3. 已审核 qc:10613
  4. ------------------------------------------------------------------------
复制代码
我现在想把其中从已审核开始的那一行,也就是第四行的内容开始一直到最后一行之前的内容导出来单独输出!请问怎么实现啊
比如1.txt  我想输出:
已审核
QC:11905

2.txt我想输出:
已审核 qc:10613

请各位帮忙!
作者: apang    时间: 2012-9-24 12:05

保存为bat,与需要修改的文件放在同一位置,修改后的文件在New文件夹里,试试
  1. @echo off
  2. md New 2>nul
  3. for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
  4.   setlocal enabledelayedexpansion
  5.   (for /f "usebackq delims=" %%b in ("%%a") do (
  6.     set "str1=!str2!"
  7.     set "str2=%%b"
  8.     if "!str1:~,3!"=="已审核" set flag=1
  9.     if defined flag echo !str1!
  10.   ))>"New\%%a"
  11.   endlocal
  12. )
复制代码

作者: 靓点    时间: 2012-9-24 12:40

  1. @echo off
复制代码

作者: yangfengoo    时间: 2012-9-24 13:37

  1. for %%a in (*.txt) do more +3 %%a >_%%a
复制代码

作者: saogz    时间: 2012-9-24 14:12

本帖最后由 saogz 于 2012-9-24 14:38 编辑

您好!
    其实文本文件第三行的内容不一定是“已审核” 开头
    我其实是想从第三行开始读取数据,而第三行不一定是已审核三个字开头
作者: apang    时间: 2012-9-24 18:13

  1. @echo off
  2. md New 2>nul
  3. for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
  4.   setlocal enabledelayedexpansion
  5.   (for /f "skip=3 usebackq delims=" %%b in ("%%a") do (
  6.     if defined a echo,!a!
  7.     set "a=%%b"
  8.   ))>"New\%%a"
  9.   endlocal
  10. )
复制代码

作者: CrLf    时间: 2012-9-24 21:08

用第三方工具sed:
  1. @echo off
  2. for %%a in (*.txt) do sed -n "H;${g;s/^.*\(已审核\)/\1/;p}" "%%a"
  3. pause
复制代码
或用此代码保存为 test.vbs:
  1. Set fso = CreateObject("SCripting.FileSystemObject")
  2. For Each file In fso.GetFolder(".").Files
  3. If LCase(fso.GetExtensionName(file))="txt" Then
  4. text = fso.OpenTextFile(file,1).ReadAll
  5. WScript.Echo Right(text,Len(text)-InStr(text,"已审核"))
  6. End If
  7. Next
复制代码

作者: terse    时间: 2012-9-24 22:08

本帖最后由 terse 于 2012-9-24 22:11 编辑

据五楼回复猜测 ”已审核“ 仅作误导 本意只是第三行开始  那样的话就看4楼代码  还是指含有”已审核“文本 第三行开始读取?
作者: apang    时间: 2012-9-25 11:01

楼主表述不清,一会第四行、一会又是第三行。很难让人猜测。
姑且认为是从第四行开始,到倒数第二行结束。
作者: zgh7878788    时间: 2012-11-9 21:22

回复 7# CrLf


    老师,请问你这个VBS怎么把弹窗的内容重定向到文本文件tt.txt里?谢谢!
作者: zgh7878788    时间: 2012-11-9 21:24

回复 7# CrLf


    VBS文件只找T.TXT文件,再把弹窗的内容重定向到TT.TXT里,怎么改?谢谢!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2