[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

RT,这个bat脚本的作用是

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

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

举例:

【原版】

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

【修改版】

我是谁啊啊啊



第 1 章 奥特曼



谁说的啊啊啊
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

像这种情况,最好在网盘上传一个真实文件,便于大家测试用。

TOP

回复 2# qixiaobin0715


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

提取码:6666

TOP

  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
复制代码
目的,学习批处理

TOP

  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 "章 " 误差应该小点
bat小白,请多指教!谢谢!

TOP

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"
复制代码
bat小白,请多指教!谢谢!

TOP

不知行否,会在原本文件名前面添加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
复制代码

TOP

回复 5# 77七


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

追加一个提问:

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

举例:

【原版】

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

【修改后效果】

我是赛罗奥特曼



第1章 变身



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

TOP

回复 8# kokoxx


   
代码第6行改为
  1. for /f "useback tokens=1* delims=[]" %%a in (`find /n /v "" ^<"%%i" ^|find "]第" ^|find "章" ^|find /v "此行不做添加空行处理"`) do (
复制代码
bat小白,请多指教!谢谢!

TOP

回复 9# 77七


    最后一个问题

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

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

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

举例:

【原版(不包括引号)】

我是奥特曼
你也是奥特曼



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


我是奥特曼

你也是奥特曼

TOP

回复 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
复制代码
bat小白,请多指教!谢谢!

TOP

回复 11# 77七


    大佬,又来叨扰您了

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

举例:

【原版】

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

【修改后效果】

我是奥特曼


你也是奥特曼

TOP

回复 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. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 13# Batcher


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

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

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

TOP

回复 14# kokoxx


    12楼给的例子是中文冒号,14楼给的样本是英文冒号。你根据实际情况修改代码再试试吧。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表