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

[文本处理] [已解决]批处理如何替换文本中的空行为指定字符?

[复制链接]
发表于 2016-3-8 20:00:23 | 显示全部楼层 |阅读模式
test.txt
示例如下:
新增:

修改:
TABLE1
TABLE2
……

希望test.txt变更为
新增:


修改:
TABLE1
TABLE2

兼容处理如下情况,如源test.txt为
新增:
TABLE1
TABLE2

修改:

变更test.txt为
新增:
TABLE1
TABLE2

修改:


指定关键字“新增”或“修改”的下一行如果为空行,替换空行成“无”,然后再加个空行,求各路大神指点。

评分

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

查看全部评分

发表于 2016-3-8 21:44:23 | 显示全部楼层
本帖最后由 ivor 于 2016-3-8 21:48 编辑

回复 1# enoone1
  1. # coding:utf-8

  2. a = False
  3. wFile = open('new.txt', 'w')
  4. with open('111.txt', 'r') as file:
  5.     for i in file:
  6.         if a == True:
  7.             a = False
  8.             if i == '\n':
  9.                 print('无', file=wFile)
  10.         if i == '新增:\n' or i == '修改:\n':
  11.             a = True
  12.             print(i, end='',file=wFile)
  13.         else:
  14.             print(i, end='',file=wFile)
  15. wFile.close()
复制代码
发表于 2016-3-8 22:29:05 | 显示全部楼层
本帖最后由 happy886rr 于 2016-3-8 22:32 编辑

回复 1# enoone1

纯正批处理,不含一点脚本语言。自动识别空行、换行,即使新增下面不是空行,是空格也能智能往下识别,直到遇到修改。
附赠自动排版功能
跟你的test.txt放一个目录。直接点击批处理,自动打开修改好的new.txt
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=0
  4. (for /f "delims=" %%a in (test.txt) do (
  5.         set str=%%a
  6.         set str=!str: =!
  7.         if !n! equ 1 (
  8.                 if "%%a"=="修改:" (
  9.                         echo 无
  10.                         echo.
  11.                         echo 修改:
  12.                         set n=0
  13.                 ) else (
  14.                         if "!str!"=="" (
  15.                                 set n=1
  16.                         ) else (
  17.                                 set n=0
  18.                                 echo.%%a
  19.                         )
  20.                 )
  21.         ) else (
  22.                 if "%%a"=="修改:" (
  23.                         echo.
  24.                         echo 修改:
  25.                 ) else (
  26.                         if not "!str!"=="" (
  27.                                 echo.%%a
  28.                         )
  29.                 )
  30.         )
  31.         if "%%a"=="新增:" (set n=1)
  32.         if "%%a"=="修改:" (set n=1)
  33. ))>new.txt
  34. if !n! equ 1 (
  35.         echo 无>>new.txt
  36.         echo.>>new.txt
  37. )
  38. start new.txt
复制代码
发表于 2016-3-8 22:49:55 | 显示全部楼层
  1. mshta http://bathome.net/s/hta/ "type(""test.txt"").replace(/(新增:)(?:\r?\n){2,}|(修改:)(\r?\n)*$/g,'$1$2\r\n空\r\n\r\n')"|more
复制代码
 楼主| 发表于 2016-3-8 23:18:13 | 显示全部楼层
回复 3# happy886rr


测试通过 多种情况都兼容 厉害  这条件判断用的巧妙 高
 楼主| 发表于 2016-3-8 23:20:56 | 显示全部楼层
回复 4# CrLf


    不明觉厉,限于自身知识面太窄,mshta没接触过,后面再学习下
 楼主| 发表于 2016-3-8 23:22:36 | 显示全部楼层
回复 2# ivor


    虽然不是BAT,但是意思看懂了,多谢回复。
发表于 2016-3-9 09:34:13 | 显示全部楼层
本帖最后由 WHY 于 2016-3-9 09:43 编辑

我也来个 "纯正的批处理"
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. for /f "delims=" %%i in ('type a.txt ^| findstr /n .* ^& echo;/') do (
  4.     set "s2=%%i"
  5.     if defined s1 (
  6.         set "s1=!s1:*:=!"
  7.         set "s2=!s2:*:=!"
  8.         echo;!s1!
  9.         if "!s2!" == "" if "!s1!" == "新增:" (
  10.             echo;无
  11.         ) else if "!s1!" == "修改:" (
  12.             echo;无
  13.         )
  14.     )
  15.     set "s1=%%i"
  16. )
  17. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 03:25 , Processed in 0.019818 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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