Board logo

标题: [文本处理] 求助批处理根据条件替换字符串 [打印本页]

作者: wei7309468    时间: 2023-1-27 19:21     标题: 求助批处理根据条件替换字符串

具体问题是:有N个文本文件,有的文本文件里有<time>时间戳(时间戳代表文字不固定)</time>这句话,有的没有,若有,则把那句话替换成<time>固定文字</time>,求教大神这个问题怎么解决呢?跪求
作者: 77七    时间: 2023-1-27 22:48

本帖最后由 77七 于 2023-1-27 22:52 编辑
  1. @echo off
  2. cd /d "%~dp0"
  3. set /p str=请输入固定文字:
  4. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  5.         for /f "delims=" %%m in ('type "%%~nxi"') do (
  6.                 set "line=%%m"
  7.                 setlocal enabledelayedexpansion
  8.                 set "line=!line:<time>=@!"
  9.                 set "line=!line:</time>=@!"
  10.                 for /f "tokens=1-3 delims=@" %%a in ("#!line!#") do (
  11.                         if "%%b" equ "" (
  12.                                 echo !line!
  13.                         ) else (
  14.                                 set "line2=%%a<time>%str%</time>%%c"
  15.                                 echo !line2:#=!
  16.                         )
  17.                 )
  18.                 endlocal
  19.         )>>xxx.temp
  20.         move /y xxx.temp "%%~nxi"
  21. )
  22. pause
复制代码

我水平太差,只能写成这样,试试能行吗?如果原文本里有@#这个符号,可以把@#换成生僻汉字
使用前先测试或备份
作者: wei7309468    时间: 2023-1-28 11:15

回复 2# 77七


    非常感谢!本地测试已经通过了,可以麻烦您在这个基础上再追加一些内容吗?(事后给您发20元微信红包)具体要求是:<time>标签其实是<startTime>时间戳</startTime><beginTime>时间戳</beginTime><endTime>时间戳</endTime>这三种类型,将凡是含有这三种标签里面的时间戳替换为${xmlunit.ignore}(←这个表达式可以认为是固定文字),然后凡是发生过替换行为的,在其行(因为所有的标签都在一行)有标签为</S:Envelope>"处之后再增加一段固定文字,"enablePlaceholders":true   ※已知信息:若干文本文件中,三种时间标签里的starttime和begintime不固定会出现哪种(但是只要出现,一定会有endTime),还有的文本里没有出现这三种标签的任何一种,但是所有的文本都有</S:Envelope>标签,追加的文字列一定是只有发生过替换过的文本文件的</S:Envelope>标签后才追加。
作者: 77七    时间: 2023-1-28 17:15

本帖最后由 77七 于 2023-1-28 17:23 编辑

回复 3# wei7309468

这样太复杂了,我不会写
你直接在顶楼更新要求,如果愿意有偿,直接到有偿求助区发帖吧




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