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

[文本处理] [己解决]如何用批处理提取txt里内容

号后引号里的内容到文本里
提取后为这样的格式
Tester: 03020SQG  020SQG4MAA136631 10/12/2010 pass COMPONENT POLARITY REVERSED
Tester: 和 pass 是固定的

[ 本帖最后由 kui198677 于 2010-12-14 18:15 编辑 ]
1

评分人数

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

fr为第三方命令,下载地址:http://ishare.iask.sina.com.cn/f/7088512.html
被处理文件为:1.xml
  1. @echo off&setlocal enabledelayedexpansion
  2. copy 1.xml Xing.txt>nul
  3. fr Xing.txt /ric:"\" " /t:"\"\r\n"
  4. fr Xing.txt /ric:">" /t:">\r\n"
  5. (for /f "tokens=1* delims==" %%a in (Xing.txt) do (
  6.         set Han=%%b
  7.         set Han=!Han:~1,-1!
  8.         if /i "%%a"=="boardType" set Ye1=!Han!
  9.         if /i "%%a"=="<ns1:BoardXML serialNumber" set Ye2=!Han:~0,-2!
  10.         if /i "%%a"=="<ns1:BoardTestXMLExport testTime" set Ye0=!Han!
  11.         if /i "%%a"=="<ns1:StationXML testerName" (
  12.                 set Ye3=!Ye0:~-5!:00 !Ye0:~5,2!/!Ye0:~8,2!/!Ye0:~0,4!
  13.                 set Ye7=!Ye2!!Ye0:~0,4!!Ye0:~5,2!!Ye0:~8,2!!Ye0:~-5,2!!Ye0:~-2!00
  14.                 )
  15.         if /i "%%a"=="<ns1:TestXML name" set Gu=!Han!
  16.         if defined Gu (
  17.                 if /i "%%a"=="repairStatus" set Ye4=!Han!
  18.                 if /i "%%a"=="<ns1:ComponentXML designator" set Ye5=!Han!
  19.                 if /i "%%a"=="indictmentType" set Ye6=!Han!
  20.                 )
  21.         if /i "%%a"=="</ns1:TestXML>" if /i "!Ye4!"=="False Call" (echo !Ye1! !Ye2! !Ye3! fail !Ye5! !Ye6!) else echo !Ye1! !Ye2! !Ye3! pass
  22.         )
  23. )>Gu.txt
  24. del /q Xing.txt
  25. ren Gu.txt %Ye7%.txt
复制代码

[ 本帖最后由 hanyeguxing 于 2010-12-12 19:34 编辑 ]
1

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

回复 2楼 的帖子

非常感谢,是可以得到想要的结果了,第一行好像重复了,得出是这样的:
Tester: 03020SQG 020SQG4MAA136631 10/12/2010 pass C9242 COMPONENT MISALIGNED
Tester: 03020SQG 020SQG4MAA136631 10/12/2010 pass C9242 COMPONENT MISALIGNED
Tester: 03020SQG 020SQG4MAA136631 10/12/2010 pass U9003 COMPONENT MISSING
Tester: 03020SQG 020SQG4MAA136631 10/12/2010 pass U9001 COMPONENT POLARITY REVERSED
第一行重了
还有一个问题。中间少了时间(是我忘记说了)时间是当前系统的时间,日期也是当天的日期,应该是:
Tester: 03020SQG 020SQG4MAA136631 08:00:00 10/12/2010 fail C9242 COMPONENT MISALIGNED
还有是有两个这样的xml文件,如果那个xml文件里repairStatus="False Call"引号里的是fail的话就提取那个xml文件里所有相对应的信息,到新的文本里,如果都有就全提到新的文本里,像这样
Tester: 03020SQG 020SQG4MAA136631 10/12/2010 fail C9242 COMPONENT MISALIGNED
Tester: 03020SQG 020SQG4MAA136631 10/12/2010 fail U9003 COMPONENT MISSING
Tester: 03020SQG 020SQG4MAA136631 10/12/2010 fail U9001 COMPONENT POLARITY REVERSED
到新的文本里,其命名新的文本为:
020SQG4MAA13663120101210080000
如果是如果是="False Call"就只提取
Tester: 03020SQG 020SQG4MAA136631 10/12/2010 pass
像这样的信息就可以了,命名为
020SQG4MAA13663120101210080000
还有我第一次发贴,我刚才想给你分,但给不了,不知道是什么问题!

[ 本帖最后由 kui198677 于 2010-12-12 17:11 编辑 ]

TOP

1,repairStatus=的值,要么是False Call,要么是fail?
2,Tester: 03020SQG 020SQG4MAA136631 10/12/2010 fail U9003 COMPONENT MISSING那个时间到底从xml里提取,还是批处理运行的时间?
3,输出文本名称020SQG4MAA13663120101210080000中的时间来自哪?
4,你给的示例中:
。。。。。
<ns1:IndictmentXML indictmentType="COMPONENT MISALIGNED" algorithm="b8080025">
<ns1:RepairActionXML repairTime="2010-10-12T00:06:14.234+08:00" repairOperator="c5c" repairStatus="False Call" indictmentType="COMPONENT MISALIGNED" repairActi/>
<ns1:ComponentXML designator="C9242" partId="8080025" packageId="8080025"/>
</ns1:IndictmentXML>

<ns1:IndictmentXML indictmentType="COMPONENT MISALIGNED" algorithm="b8080025">
<ns1:RepairActionXML repairTime="2010-10-12T00:06:14.234+08:00" repairOperator="c5c" repairStatus="False Call" indictmentType="COMPONENT MISALIGNED" repairActi/>
<ns1:ComponentXML designator="C9242" partId="8080025" packageId="8080025"/>
</ns1:IndictmentXML>
。。。。。。

这两部分是重复的,是楼主复制错误,还是原始xml就是这样的?

[ 本帖最后由 hanyeguxing 于 2010-12-12 17:35 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

回复 4楼 的帖子

我把xml文件发给你吧,我改为txt,你收到把名字改成xml,上传不支持xml格式
附件是xml文件,你改个名就可以了,这是两个测试文件,我就是想把这两个文件处理下,如果repairStatus=""引号里的是Fail就提取下面对应的信息到新文本里
BoardTestXMLExport testTime="2010-10-12T00:01:14.000+08:00"
boardType="03020SQG"
serialNumber="020SQG4MAA136631_2"
indictmentType="COMPONENT POLARITY REVERSED"
designator="C9242
时间是从xml文件里得来的,
如果是如果是="False Call"就只提取
Tester: 03020SQG 020SQG4MAA136631 10/12/2010 pass
像这样的信息就可以了,命名为
020SQG4MAA13663120101210080000

[ 本帖最后由 kui198677 于 2010-12-12 18:52 编辑 ]

TOP

代码已经在2楼更新。。。
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

回复 6楼 的帖子

谢谢,可以了,非常感谢,辛苦了!

TOP

返回列表