Board logo

标题: [文本处理] 【已解决】求bat脚本替换符合标准文本行内特定文字 [打印本页]

作者: kokoxx    时间: 2024-4-2 20:40     标题: 【已解决】求bat脚本替换符合标准文本行内特定文字

本帖最后由 kokoxx 于 2024-4-3 12:16 编辑

RT,希望实现的效果是

【处理前】

=== 第1章奥特曼

【处理后】

=== 第1章 奥特曼

(案例结束)

也就是将符合标准的文本行(包含“=== 第”)中的“章”变成“章 ”

先谢谢了
作者: hlzj88    时间: 2024-4-2 21:04

  1. @echo off
  2. set /p wb=------文本名-----》
  3. for /l  %%i in (0,1,9) do sed -i "s/%%i章/%%i章 /g" %wb%
  4. pause
复制代码
sed地址  http://bcn.bathome.net/s/tool/index.html?key=sed
作者: 77七    时间: 2024-4-3 12:10

  1. @echo off
  2. chcp 65001 >nul
  3. rem 批处理保存为utf-8编码格式
  4. cd /d "%~dp0"
  5. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  6. setlocal
  7. for /f "tokens=1 delims=[]" %%a in ('find /n "=== 第" ^<"%%i" ^|find "章"') do (
  8. set #%%a=1
  9. )
  10. (for /f "tokens=1* delims=[]" %%a in ('find /n /v "" ^<"%%i"') do (
  11. if defined #%%a (
  12. for /f "tokens=1* delims=章" %%x in ("%%b") do (
  13. echo %%x章 %%y
  14. )
  15. ) else (
  16. echo=%%b
  17. )
  18. ))>$
  19. move $ "%%i"
  20. endlocal
  21. )
  22. pause
复制代码

作者: kokoxx    时间: 2024-4-3 12:16

回复 3# 77七


    测试通过,多谢大佬出手
作者: aloha20200628    时间: 2024-4-3 16:33


用纯P代码有时再绑定findstr的过滤功能,确实可以明显提高聚集目标数据的准确性,这对于‘提取’文件数据的效率还是相当可观的,但如果要对文件数据作‘增减或替换’处理,尤其是当数据体量较大,纯P+findstr方案就显得繁琐和低效了。好在已有bat+jscript/vbs/ps/sed混编方案,不仅有明显的效率优势,还可借助比较完整的正则方法使字符串的‘增减替换’一步到位。用本帖为例的两段代码如下
bat+jscript方案(存为test.bat运行》将当前目录下的全部*.txt文件中的 === 第nnn章xxx 改为 === 第nnn章 xxx 结果存为新文件*.new.txt)
  1. @set @v=1 //&(for %%F in (*.txt) do @type "%%~F"|cscript /e:jscript "%~f0">"%%~nF.new.txt") &exit/b
  2. s=WSH.stdin.readall(); WSH.echo(s.replace(/(第\d+章)([^ ])/g, '$1 $2')); WSH.quit();
复制代码
bat+sed方案(存为test.bat运行》将当前目录下的全部*.txt文件中的 === 第nnn章xxx 改为 === 第nnn章 xxx 结果存为新文件*.new.txt)
  1. @echo off
  2. for %%F in (*.txt) do sed.exe -r "s/(第[0-9]+章)([^ ])/\1 \2/g" "%%~F">"%%~nF.new.txt"
  3. exit/b
复制代码





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