返回列表 发帖

[文本处理] 【已解决】请帮忙给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

@echo off&&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b/on *.txt') do (
    for /f "delims=" %%j in ('type "%%i"') do (
      set "yj=%%j"
      echo !yj!
      set yj=!yj: =!
      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
   )
move /y 1.nul %%i>nul
)
pauseCOPY
目的,学习批处理

TOP

@echo off
rem 批处理保存为utf-8编码格式
chcp 65001 >nul
for /f "useback delims=" %%i in (`dir /b /a-d *.txt`) do (
setlocal
for /f "useback tokens=1* delims=[]" %%a in (`find /n /v "" ^<"%%i" ^|find "]第" ^|find "章"`) do (
set _"%%a"=1
)
(for /f "useback tokens=1* delims=[]" %%a in (`find /n /v "" ^<"%%i"`) do (
if not defined _"%%a" (
echo=%%b
) else (
echo=
echo=
echo=
echo=%%b
echo=
echo=
echo=
)
))>$
move $ "%%i"
endlocal
)
pauseCOPY

使用前先备份!可能会有误差,如果”章“后面有个空格,代码改为 find "章 " 误差应该小点
bat小白,请多指教!谢谢!

TOP

wfr
http://bcn.bathome.net/tool/wfr.exe

wfr *.txt /encin:utf-8 /encout:utf-8 -r:"^\s*第\s*\d+\s*章.*" -t:"\n\n\n\0\n\n\n"COPY
bat小白,请多指教!谢谢!

TOP

不知行否,会在原本文件名前面添加new_创建新文件
@echo off
set "z=绗.*绔"
chcp 65001
for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
setlocal
(for /f "delims=" %%k in ('findstr /n .* "%%i"') do (
set "str=%%k"
setlocal enabledelayedexpansion
echo=!str:*:=!|findstr /i /b  "!z!" 1>nul && set aaa=1
if defined aaa (
echo=&echo=&echo=
echo=!str:*:=!
echo=&echo=&echo=
set aaa=
) else (
echo=!str:*:=!
)
endlocal
))>"new_%%i.txt"
endlocal
)
chcp 936&echo done&pause&exit /bCOPY

TOP

回复 5# 77七


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

追加一个提问:

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

举例:

【原版】

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

【修改后效果】

我是赛罗奥特曼



第1章 变身



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

TOP

回复 8# kokoxx


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

TOP

回复 9# 77七


    最后一个问题

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

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

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

举例:

【原版(不包括引号)】

我是奥特曼
你也是奥特曼



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


我是奥特曼

你也是奥特曼

TOP

回复 10# kokoxx


  
@echo off
rem 批处理保存为utf-8编码格式
chcp 65001 >nul
for /f "useback delims=" %%i in (`dir /b /a-d *.txt`) do (
(for /f "useback tokens=1* delims=[]" %%a in (`find /n /v "" ^<"%%i"`) do (
echo=
echo=%%b
))>$
move $ "%%i"
)
pauseCOPY
bat小白,请多指教!谢谢!

TOP

回复 11# 77七


    大佬,又来叨扰您了

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

举例:

【原版】

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

【修改后效果】

我是奥特曼


你也是奥特曼

TOP

回复 12# kokoxx
@echo off
chcp 65001 >nul
cd /d "%~dp0"
for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
    echo %%i
    findstr /i /v /c:"猜你喜欢:" /c:"更多推荐:" "%%i" > "%%i.ttttt"
    move /y "%%i.ttttt" "%%i" >nul
)COPY
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或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

返回列表