标题: [文本处理] 求助批处理根据条件替换字符串 [打印本页]
作者: wei7309468 时间: 2023-1-27 19:21 标题: 求助批处理根据条件替换字符串
具体问题是:有N个文本文件,有的文本文件里有<time>时间戳(时间戳代表文字不固定)</time>这句话,有的没有,若有,则把那句话替换成<time>固定文字</time>,求教大神这个问题怎么解决呢?跪求
作者: 77七 时间: 2023-1-27 22:48
本帖最后由 77七 于 2023-1-27 22:52 编辑
- @echo off
- cd /d "%~dp0"
- set /p str=请输入固定文字:
- for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
- for /f "delims=" %%m in ('type "%%~nxi"') do (
- set "line=%%m"
- setlocal enabledelayedexpansion
- set "line=!line:<time>=@!"
- set "line=!line:</time>=@!"
- for /f "tokens=1-3 delims=@" %%a in ("#!line!#") do (
- if "%%b" equ "" (
- echo !line!
- ) else (
- set "line2=%%a<time>%str%</time>%%c"
- echo !line2:#=!
- )
- )
- endlocal
- )>>xxx.temp
- move /y xxx.temp "%%~nxi"
- )
- 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 |