Board logo

标题: [文本处理] 如何将xml文件里的多个指定相同标签里的数字按先后出现的顺序修改成递增数字 [打印本页]

作者: Vcehurry    时间: 2018-4-11 21:01     标题: 如何将xml文件里的多个指定相同标签里的数字按先后出现的顺序修改成递增数字

BAT如何修改一个文件里的多个指定行数,且进行标序
新手求教!!
现有如下格式的文本

需要将每个<ID>数</ID>进行标序
即把第4行改成<ID>1</ID>
   把第8行改成<ID>2</ID>
   把第12行改成<ID>3</ID>
   ……………………
   把第4n行改成<ID>n</ID>
   ……………………
   如此往复,直到遇见</Table>,结束标序
再将文件保存
求教如何写这样一个批处理代码,不胜感激。
作者: yhcfsr    时间: 2018-4-11 21:13

本帖最后由 yhcfsr 于 2018-4-11 21:14 编辑

样本文件传上来吧。自己做样本测试太麻烦啦。
BAT处理这种特殊字符一大把的文本,有点难度,不如POWERSHELL干脆。
作者: Vcehurry    时间: 2018-4-11 21:20

回复 2# yhcfsr
好的,已上传样本。
作者: yhcfsr    时间: 2018-4-11 22:20

本帖最后由 yhcfsr 于 2018-4-11 22:22 编辑

POWERSHELL
1.备份源文件
2.此为powershell脚本,保存为ps1扩展名文件,右键单击脚本,以powershell运行
3.未对powershell进行过设置的,可以管理员身份运行CMD,复制以下命令到命令提符 以解除脚本限制
  1. powershell -c "set-executionpolicy unrestricted"
复制代码
当然也可以管理员运行POWERSHELL,输入以下命令解除脚本限制
  1. set-executionpolicy unrestricted
复制代码
​4. WIN10以下系统如出错,可能需要去微软官网下载补丁升级powershell
  1. $SrcFile="d:\test\abcd.xml";#源文件
  2. $n=0;$str=$null;$content=$null;$i=0;
  3. $content=type $SrcFile;
  4. $content|%{
  5.    if ($_ -match '<ID>[0-9]{1,}</ID>'){ $n++;$str+=($_ -replace '<ID>[0-9]{1,}</ID>', "<ID>$n</ID>")} else {$str+=$_}
  6.    if (++$i -lt $content.count){$str+="`r`n"}
  7. }
  8. Out-File -FilePath $SrcFile -InputObject $str -NoNewline -Encoding utf8;
复制代码

作者: Vcehurry    时间: 2018-4-12 14:33

回复 4# yhcfsr
您好,感谢您的帮助。
请问我在使用powershell运行代码以后,显示错误:
Out-File : 找不到与参数名称“NoNewline”匹配的参数。
计算机系统是win6 64位的
这样是需要更新powershell吗?
作者: Vcehurry    时间: 2018-4-12 15:04

回复 4# yhcfsr
我将-NoNewline命令删除以后就能用了,很好地实现了功能,非常感谢您的帮助。
作者: yhcfsr    时间: 2018-4-12 16:23

回复 6# Vcehurry


    nonewline 是powersehll5才有的参数,防止最后一行生成空行,如果不介意生成空行,可以删除这个参数




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