找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 125489|回复: 32

[文本处理] 【已解决】请帮忙给txt增加空白行的bat脚本

[复制链接]
发表于 2023-9-23 09:35:15 | 显示全部楼层 |阅读模式
RT,这个bat脚本的作用是

将bat脚本同一个文件夹下的*.txt打开

检测到txt内容中有一个文本行的开头是“第 xxx 章”(xx是阿拉伯数字,允许xxx前后有若干空格,或没有空格),则在该文本行之前和之后添加三个空白文本行

举例:

【原版】

我是谁啊啊啊
第 1 章 奥特曼
谁说的啊啊啊

【修改版】

我是谁啊啊啊



第 1 章 奥特曼



谁说的啊啊啊

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2023-9-23 09:46:34 | 显示全部楼层
像这种情况,最好在网盘上传一个真实文件,便于大家测试用。
 楼主| 发表于 2023-9-23 09:58:48 | 显示全部楼层
回复 2# qixiaobin0715


    https://www.123pan.com/s/pbxrVv-TNAY.html

提取码:6666
发表于 2023-9-23 10:36:29 | 显示全部楼层
  1. @echo off&&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b/on *.txt') do (
  3.     for /f "delims=" %%j in ('type "%%i"') do (
  4.       set "yj=%%j"
  5.       echo !yj!
  6.       set yj=!yj: =!
  7.       echo !yj!|findstr /i "第[1-9].*章"&&echo.>>1.nul&&echo.>>1.nul&&echo.>>1.nul%%echo !yj!>>1.nul&&echo.>>1.nul&&echo.>>1.nul&&echo.>>1.nul || echo !yj!>>1.nul
  8.    )
  9. move /y 1.nul %%i>nul
  10. )
  11. pause
复制代码
发表于 2023-9-23 11:22:38 | 显示全部楼层
  1. @echo off
  2. rem 批处理保存为utf-8编码格式
  3. chcp 65001 >nul
  4. for /f "useback delims=" %%i in (`dir /b /a-d *.txt`) do (
  5.         setlocal
  6.         for /f "useback tokens=1* delims=[]" %%a in (`find /n /v "" ^<"%%i" ^|find "]第" ^|find "章"`) do (
  7.                 set _"%%a"=1
  8.         )
  9.         (for /f "useback tokens=1* delims=[]" %%a in (`find /n /v "" ^<"%%i"`) do (
  10.                 if not defined _"%%a" (
  11.                         echo=%%b
  12.                 ) else (
  13.                         echo=
  14.                         echo=
  15.                         echo=
  16.                         echo=%%b
  17.                         echo=
  18.                         echo=
  19.                         echo=
  20.                 )
  21.         ))>$
  22.         move $ "%%i"
  23.         endlocal
  24. )
  25. pause
复制代码

使用前先备份!可能会有误差,如果”章“后面有个空格,代码改为 find "章 " 误差应该小点
发表于 2023-9-23 13:49:36 | 显示全部楼层
wfr
http://bcn.bathome.net/tool/wfr.exe

  1. wfr *.txt /encin:utf-8 /encout:utf-8 -r:"^\s*第\s*\d+\s*章.*" -t:"\n\n\n\0\n\n\n"
复制代码
发表于 2023-9-23 17:04:27 | 显示全部楼层
不知行否,会在原本文件名前面添加new_创建新文件

  1. @echo off

  2. set "z=绗.*绔"

  3. chcp 65001
  4. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  5. setlocal

  6. (for /f "delims=" %%k in ('findstr /n .* "%%i"') do (
  7. set "str=%%k"
  8. setlocal enabledelayedexpansion
  9. echo=!str:*:=!|findstr /i /b  "!z!" 1>nul && set aaa=1
  10. if defined aaa (
  11. echo=&echo=&echo=
  12. echo=!str:*:=!
  13. echo=&echo=&echo=
  14. set aaa=
  15. ) else (
  16. echo=!str:*:=!
  17. )
  18. endlocal
  19. ))>"new_%%i.txt"

  20. endlocal
  21. )

  22. chcp 936&echo done&pause&exit /b
复制代码
 楼主| 发表于 2023-9-23 17:23:44 | 显示全部楼层
回复 5# 77七


大佬,试过了你的脚本,确实有用

追加一个提问:

如果我要实现 文本行同时出现“第x章”和“此行不做添加空行处理”(举例,可以在代码里修改成任意值)字样,就不做添加空行处理,该怎么在原有代码的基础上做修改

举例:

【原版】

我是赛罗奥特曼
第1章 变身
我是泰罗奥特曼
第2章 此行不做添加空行处理
我是迪迦奥特曼

【修改后效果】

我是赛罗奥特曼



第1章 变身



我是泰罗奥特曼
第2章 此行不做添加空行处理
我是迪迦奥特曼
发表于 2023-9-23 17:53:43 | 显示全部楼层
回复 8# kokoxx


   
代码第6行改为
  1.         for /f "useback tokens=1* delims=[]" %%a in (`find /n /v "" ^<"%%i" ^|find "]第" ^|find "章" ^|find /v "此行不做添加空行处理"`) do (
复制代码
 楼主| 发表于 2023-9-23 18:06:02 | 显示全部楼层
回复 9# 77七


    最后一个问题

如何用bat在同文件夹下*.txt的行与行之间增加一个空白行?

-- 嗯,我知道这个功能用wps或word可以很轻松实现,但是代价是wps/word处理大体积txt(超过5m)时,会出现卡死崩溃现象

-- 本来是想单独再发一个求助帖,不过有自我觉得这么搞有发垃圾求助帖的嫌疑,就只能再叨扰大佬了(捂脸)~

举例:

【原版(不包括引号)】

我是奥特曼
你也是奥特曼



【修改后版本(不包括引号)】


我是奥特曼

你也是奥特曼

发表于 2023-9-23 18:16:21 | 显示全部楼层
回复 10# kokoxx


  
  1. @echo off
  2. rem 批处理保存为utf-8编码格式
  3. chcp 65001 >nul
  4. for /f "useback delims=" %%i in (`dir /b /a-d *.txt`) do (
  5.         (for /f "useback tokens=1* delims=[]" %%a in (`find /n /v "" ^<"%%i"`) do (
  6.                 echo=
  7.                 echo=%%b
  8.         ))>$
  9.         move $ "%%i"
  10. )
  11. pause
复制代码
 楼主| 发表于 2023-9-25 09:50:30 | 显示全部楼层
回复 11# 77七


    大佬,又来叨扰您了

请问bat能否做到查找同文件夹下的*.txt中包含有“猜你喜欢:”和“更多推荐:”的一行后,将其所在的一行替换为空行

举例:

【原版】

我是奥特曼
猜你喜欢:斗破苍穹 武动乾坤 神墓
更多推荐:斗破苍穹 武动乾坤 神墓
你也是奥特曼

【修改后效果】

我是奥特曼


你也是奥特曼
发表于 2023-9-25 10:19:03 | 显示全部楼层
回复 12# kokoxx
  1. @echo off
  2. chcp 65001 >nul
  3. cd /d "%~dp0"
  4. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  5.     echo %%i
  6.     findstr /i /v /c:"猜你喜欢:" /c:"更多推荐:" "%%i" > "%%i.ttttt"
  7.     move /y "%%i.ttttt" "%%i" >nul
  8. )
复制代码
 楼主| 发表于 2023-9-25 10:47:04 | 显示全部楼层
回复 13# Batcher


感谢大佬百忙中出手,不过我这边测试无效T-T

附带一个测试失败的样本:

    https://www.123pan.com/s/pbxrVv-ROAY.html
发表于 2023-9-25 11:08:53 | 显示全部楼层
回复 14# kokoxx


    12楼给的例子是中文冒号,14楼给的样本是英文冒号。你根据实际情况修改代码再试试吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 04:09 , Processed in 0.018763 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表