首页 > 解决方案 > 如何让程序正确运行

问题描述

这个使文件 out1.txt 中的所有字符串反转的程序工作错误。在 result.txt 中,我发现最后一个字符串输入错误 <a >020701BT</a> 后跟 <a>020701BT</a>

如何正确反转文本文件

@echo off
 setlocal enabledelayedexpansion

set I=0

for /F "tokens=*" %%k in (out1.txt) do (
  set /A I=!I! + 1
  set LINE!I!=%%k
)

for /L %%c in (!I!,-1,1) do (
echo !LINE%%c! >> result.txt
)

out1.txt - 输入文件

<a>020701BT</a>

< >710f7fa45c6911e9648d2cfda1bf577d</ >

<一>020701BT</一>

< >cde9bde81a5b11e96b882cfda1bf577d</ >

<一>020701BT</一>

< >d266b9021a5b11e96b882cfda1bf577d</ >

<一>040109GT</一>

result.txt 输出文件最后有错误

< >cde9bde81a5b11e96b882cfda1bf577d</ >

<a>020701BT</a>

< >710f7fa45c6911e9648d2cfda1bf577d</ >

<a>020701BT</a>

<a>020701BT</a>

标签: batch-filecmd

解决方案


虽然 Gerhard Barnard 的答案有效(在将输出重定向到新文件之后)
并且通常 XML 文件应该使用 XML 工具处理,

我建议使用带有环视的正则表达式的 PowerShell脚本

RE 的优点是它独立于位置工作,只需要定义的前缀/后缀。

在 cmd 行/批处理中讨论主题

powershell -NoP -C "(Get-Content .\goods.xml -raw) -replace '(?<=\<frame\>)..(?=/)'|Set-Content .\goods.xml"

这里是正则表达式(?<=\<frame\>)..(?=/)

  • 删除任何两个字符..
  • <frame>前面是包含在零长度肯定后向断言中的文字文本
  • 后跟一个/包含在零长度正前瞻断言中的文字

推荐阅读