kokozzz123 发表于 2023-9-23 09:23:42

请大佬出手,帮忙写一个给txt增加空白行的bat脚本

RT,这个bat脚本的作用是

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

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

举例:

【原版】

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

【修改版】

我是谁啊啊啊



第 1 章 奥特曼



谁说的啊啊啊

chishingchan 发表于 2023-9-23 09:28:34

这里大佬多!《批处理之家》
http://bbs.bathome.net/index.php

liuzhaoyzz 发表于 2023-9-23 10:15:17

@echo off
sed -e "/第 1 章 奥特曼/i\\n\n" -e "/第 1 章 奥特曼/a\\n\n" -i 1.txt
echo 已在“第 1 章 奥特曼”前后添加三个空行。
pause 1>nul 2>nul

试试这个。

窄口牛 发表于 2023-9-23 11:30:41

notepad2有删除空行,貌似没有增加空行?确实没用过这种需求,不知道有没有。

batche 发表于 2023-9-23 11:52:29

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:23

batche 发表于 2023-9-23 11:52
sed可以处理UTF8文本吗?

好像不行,我写过几个批处理,比如pe/linux安装器之类的,我用c改了个程序,先把文本转换为ansi编码,sed改过之后再转换为utf8。

nttwqz 发表于 2023-9-23 12:42:44

看个小说还要修改整理,是不是过于认真了点儿?

很多小说阅读器都有类似功能,无需修改源文件,比如开源小说阅读器https://github.com/gedoor/legado

ppll2030 发表于 2023-9-23 23:52:08

窄口牛 发表于 2023-9-23 11:30
notepad2有删除空行,貌似没有增加空行?确实没用过这种需求,不知道有没有。

可以用正则表达替换来添加换行啊

ppll2030 发表于 2023-9-23 23:54:03

nttwqz 发表于 2023-9-23 12:42
看个小说还要修改整理,是不是过于认真了点儿?

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

也许他只是拿小说来举例而已呢

nttwqz 发表于 2023-9-24 12:29:11

ppll2030 发表于 2023-9-23 23:54
也许他只是拿小说来举例而已呢

小说阅读器被不只是能用来看小说……

my9823 发表于 2023-9-24 22:13:39

wsl中的sed不如linux中的sed强大

c5215016 发表于 2023-9-26 08:51:30

什么

martin313 发表于 2023-9-26 09:01:06


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

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

插入空格后,再复制黏贴到 记事本,即可

kala2018 发表于 2023-9-30 19:50:42

进来学习一下,谢谢大佬

dos时代菜鸟 发表于 2023-9-30 20:47:56

本帖最后由 dos时代菜鸟 于 2023-10-1 09:45 编辑


思路如下:

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

rem 逐行处理文件
for /f "delims=" %%c in (!file0!) do (
    set "str1=%%c!ltrs!"
    rem 把当前行内容中的 特定字符去掉
    for /f "tokens=1,2* delims=," %%x in ("!ltrs!") do (
      set str1=!str1:%%x=!
      set str1=!str1:%%y=!
      for %%i in (%%z) do (set str1=!str1:%%i=! )
    )
    rem 把当前行信息传递给另一个文件
    rem 如果当前行在去掉特定字符后前两个字是 “第章” 就把该行前后各加三个空行。
    (
      if "!str1:~0,2!"=="第章" (
            echo.
            echo.
            echo.
            echo %%c
            echo.
            echo.
            echo.
      ) else (
            echo %%c
      )
    )>>!file1!
)
echo.
echo !file0! ===^>!file1!
echo ===============================
type !file1!
echo ===============================

echo.
pause




kala2018 发表于 2023-9-30 22:14:10

进来学习一下,谢谢大佬

dos时代菜鸟 发表于 2023-10-1 09:46:19

批处理 无非就是 for + if + set
页: [1]
查看完整版本: 请大佬出手,帮忙写一个给txt增加空白行的bat脚本