无忧启动论坛

标题: 请大佬出手,帮忙写一个给txt增加空白行的bat脚本 [打印本页]

作者: kokozzz123    时间: 2023-9-23 09:23
标题: 请大佬出手,帮忙写一个给txt增加空白行的bat脚本
RT,这个bat脚本的作用是

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

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

举例:

【原版】

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

【修改版】

我是谁啊啊啊



第 1 章 奥特曼



谁说的啊啊啊

作者: chishingchan    时间: 2023-9-23 09:28
这里大佬多!《批处理之家》
http://bbs.bathome.net/index.php
作者: liuzhaoyzz    时间: 2023-9-23 10:15
@echo off
sed -e "/第 1 章 奥特曼/i\\n\n" -e "/第 1 章 奥特曼/a\\n\n" -i 1.txt
echo 已在“第 1 章 奥特曼”前后添加三个空行。
pause 1>nul 2>nul

试试这个。

文本前后添加空行.rar

114.26 KB, 下载次数: 7, 下载积分: 无忧币 -2


作者: 窄口牛    时间: 2023-9-23 11:30
notepad2有删除空行,貌似没有增加空行?确实没用过这种需求,不知道有没有。
作者: batche    时间: 2023-9-23 11:52
liuzhaoyzz 发表于 2023-9-23 10:15
@echo off
sed -e "/第 1 章 奥特曼/i\\n\n" -e "/第 1 章 奥特曼/a\\n\n" -i 1.txt
echo 已在“第 1 章  ...

sed可以处理UTF8文本吗?
作者: liuzhaoyzz    时间: 2023-9-23 12:37
batche 发表于 2023-9-23 11:52
sed可以处理UTF8文本吗?

好像不行,我写过几个批处理,比如pe/linux安装器之类的,我用c改了个程序,先把文本转换为ansi编码,sed改过之后再转换为utf8。
作者: nttwqz    时间: 2023-9-23 12:42
看个小说还要修改整理,是不是过于认真了点儿?

很多小说阅读器都有类似功能,无需修改源文件,比如开源小说阅读器https://github.com/gedoor/legado
作者: ppll2030    时间: 2023-9-23 23:52
窄口牛 发表于 2023-9-23 11:30
notepad2有删除空行,貌似没有增加空行?确实没用过这种需求,不知道有没有。

可以用正则表达替换来添加换行啊
作者: ppll2030    时间: 2023-9-23 23:54
nttwqz 发表于 2023-9-23 12:42
看个小说还要修改整理,是不是过于认真了点儿?

很多小说阅读器都有类似功能,无需修改源文件,比如开源 ...

也许他只是拿小说来举例而已呢
作者: nttwqz    时间: 2023-9-24 12:29
ppll2030 发表于 2023-9-23 23:54
也许他只是拿小说来举例而已呢

小说阅读器被不只是能用来看小说……
作者: my9823    时间: 2023-9-24 22:13
wsl中的sed不如linux中的sed强大
作者: c5215016    时间: 2023-9-26 08:51
什么
作者: martin313    时间: 2023-9-26 09:01

我的办法,比较笨,但也可以实现

把txt文本,导入到 excel ,再利用 方方格子 的插入 N 行功能,来实现,很容易。

插入空格后,再复制黏贴到 记事本,即可
作者: kala2018    时间: 2023-9-30 19:50
进来学习一下,谢谢大佬
作者: dos时代菜鸟    时间: 2023-9-30 20:47
本帖最后由 dos时代菜鸟 于 2023-10-1 09:45 编辑


思路如下:

  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. rem 变量初始化
  4.     set file0=0.txt
  5.     set file1=1.txt
  6.     rem 定义 "第xxx章" 中的 xxx 内容,包括 "空格 tab 0~9 一~万" 用逗号间隔
  7.     set "ltrs= ,    ,0,1,2,3,4,5,6,7,8,9,一,二,三,四,五,六,七,八,九,十,百,千,万"
  8.     if exist !file1! del /q !file1!

  9. rem 逐行处理文件
  10. for /f "delims=" %%c in (!file0!) do (
  11.     set "str1=%%c!ltrs!"
  12.     rem 把当前行内容中的 特定字符去掉
  13.     for /f "tokens=1,2* delims=," %%x in ("!ltrs!") do (
  14.         set str1=!str1:%%x=!
  15.         set str1=!str1:%%y=!
  16.         for %%i in (%%z) do (set str1=!str1:%%i=! )
  17.     )
  18.     rem 把当前行信息传递给另一个文件
  19.     rem 如果当前行在去掉特定字符后前两个字是 “第章” 就把该行前后各加三个空行。
  20.     (
  21.         if "!str1:~0,2!"=="第章" (
  22.             echo.
  23.             echo.
  24.             echo.
  25.             echo %%c
  26.             echo.
  27.             echo.
  28.             echo.
  29.         ) else (
  30.             echo %%c
  31.         )
  32.     )>>!file1!
  33. )
  34. echo.
  35. echo !file0! ===^>!file1!
  36. echo ===============================
  37. type !file1!
  38. echo ===============================

  39. echo.
  40. pause
复制代码
0_2_1.7z (803 Bytes, 下载次数: 4)




作者: kala2018    时间: 2023-9-30 22:14
进来学习一下,谢谢大佬
作者: dos时代菜鸟    时间: 2023-10-1 09:46
批处理 无非就是 for + if + set




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3