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

[文本处理] 【已解决】求助批处理从XML中提取多处内容并输出到txt文档。

[复制链接]
 楼主| 发表于 2024-5-27 17:02:16 | 显示全部楼层
回复 14# newswan

老师  提取出来的内容,输出第一个txt行数显示正确,第二个开始就会多一行,时间这行就会显示2次。第3个 4个等都会多出时间一行。

车      :   龙台站
IC卡车牌:   渝A02F6T
时间    :   2024-05-23T05:54:00
入口车牌:   渝A02F6T
OBU车牌:   渝A02F6T
出口车牌:   渝A02F6T
时间    :   2024-05-23T05:54:00
发表于 2024-5-27 20:32:06 | 显示全部楼层
回复 16# licunwei


    你查看原始数据,是不是多了一个
 楼主| 发表于 2024-5-27 21:39:53 | 显示全部楼层
回复 17# newswan
谢谢,源文件有2个数据。txt文档内时间能否显示到第二行呢,让车牌显示3-6行。
发表于 2024-5-27 23:53:49 | 显示全部楼层
回复 18# licunwei

  1. $ht = [Ordered]@{
  2.         CPCIssueOrg = "车      :"
  3.         EnTime      = "时间    :"
  4.         CPUVlp      = "IC卡车牌:"
  5.         EnVLP       = "入口车牌:"
  6.         OBUVlp      = "OBU 车牌:"
  7.         VLP         = "出口车牌:"
  8. }

  9. $str = $ht.values -join "`n"

  10. function get-info() {
  11.         param(
  12.                 [string]$filexml ,
  13.                 [string]$filetxt
  14.         )
  15.        
  16.         [xml]$xml = Get-Content -Path $filexml -Encoding "UTF8"
  17.         $xml.datas.data.attribute | ForEach-Object {
  18.                 if ( $_.name -eq "msg" ) { $string = $_.value }
  19.         }
  20.         $string = $string.Substring(1,$string.length-2)
  21.         $string = $string -replace '(?<="),',"`n"
  22.         $string = $string -replace '"(\w+)":"(.*)"',"`$1`t`$2"
  23.         $as = $string -split "`n"
  24.        
  25.         $as | ForEach-Object {
  26.                 $a = $_ -split "`t"
  27.                 if ( $ht[$a[0]] ) {
  28.                         $str = $str -replace ( "(?m)^" + $ht[$a[0]] + ".*$" ), ( "{0}   {1}" -f $ht[$a[0]] , $a[1] )
  29.                 }
  30.         }
  31.         $str | Out-File $filetxt
  32. }


  33. $Path = "C:\Users\admin\Desktop"

  34. Get-ChildItem -Path $Path -Filter "*.xml" | ForEach-Object {
  35.         get-info $_.FullName ( $_.DirectoryName + "" + $_.BaseName + ".txt")
  36. }

复制代码

评分

参与人数 1技术 +1 收起 理由
licunwei + 1 乐于助人

查看全部评分

 楼主| 发表于 2024-5-28 20:55:34 | 显示全部楼层
回复 19# newswan


    老师 如果我要新增提取项,比如说增加了车道号 ,需要怎么添加命令呢,谢谢了。
        CPCIssueOrg = "车      :"
        lanID         ="车道号  :"
        EnTime      = "时间    :"
        CPUVlp      = "IC卡车牌:"
        EnVLP       = "入口车牌:"
        OBUVlp      = "OBU 车牌:"
        VLP         = "出口车牌:"
 楼主| 发表于 2024-5-28 22:00:34 | 显示全部楼层
回复 20# licunwei
已经学会怎么添加提取项了。
 楼主| 发表于 2024-5-28 22:52:59 | 显示全部楼层
回复 19# newswan

老师,我想知道你是添加的哪一条命令锁定的时间永远输出显示为第二行。
发表于 2024-5-29 08:47:01 | 显示全部楼层
回复 22# licunwei

前面那一段,包含了顺序
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 00:05 , Processed in 0.024108 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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