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

[文本处理] 求助,用批处理如何删除文件里的某些行。

[复制链接]
发表于 2022-11-9 21:20:20 | 显示全部楼层 |阅读模式
本帖最后由 smatenchen 于 2022-11-11 22:18 编辑


求助,用批处理如何删除文件里的某些行。


1,
问题,有一个文件 1.txt,其内容如下,

……
[111]
……
[222]
……
……
……
……
[333]
……


其中……代表已省略的内容。


2,
要求,
删除 1.txt 里[222]所在行之下,[333]所在行之上的各行,其余要保留。
即,只删除[222]与[333]之间的各行,其余要保留。


3,
请大神们帮忙!感谢!
 楼主| 发表于 2022-11-9 21:23:37 | 显示全部楼层
本帖最后由 smatenchen 于 2022-11-10 14:54 编辑

回复 1# Batcher

1,
请大神帮忙!感谢!
 楼主| 发表于 2022-11-9 21:24:36 | 显示全部楼层
本帖最后由 smatenchen 于 2022-11-10 14:55 编辑

回复 1# qixiaobin0715

1,
请大神帮忙!感谢!
发表于 2022-11-10 09:20:18 | 显示全部楼层
回复 2# smatenchen


回复 2# Batcher

即使手工写一个,也没用,论坛程序不会通知的。
 楼主| 发表于 2022-11-10 14:07:29 | 显示全部楼层
回复 4# Batcher

发表于 2022-11-10 14:28:23 | 显示全部楼层
回复 1# smatenchen


   
下载gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe ),将:

  1. ……
  2. [111]
  3. ……
  4. [222]
  5. ……
  6. ……
  7. ……
  8. ……
  9. [333]
  10. ……
复制代码
以ANSI格式保存为1.txt
执行:

  1. gawk "/\[222\]/{while((getline)>0)if(/\[333\]/){print;next}}1"  1.txt>2.txt
复制代码
结果(2.txt):

  1. ……
  2. [111]
  3. ……
  4. [333]
  5. ……
复制代码
 楼主| 发表于 2022-11-10 14:37:46 | 显示全部楼层
回复 6# hfxiang


1,
非常感谢!


2,
感谢大神出手帮忙!


3,
你的方法,需要借助其它应用程序。


有办法,只用批处理就能解题吗?


请试试,只用批处理去解题的方法。
发表于 2022-11-10 14:50:37 | 显示全部楼层
回复 7# smatenchen

  1. @echo off
  2. @rem 保存为ANSI格式
  3. setlocal enabledelayedexpansion
  4. set /a b=1
  5. for /f %%a in (1.txt) do (
  6.         if "%%~a"=="[222]" set /a b=0
  7.         if "%%~a"=="[333]" set /a b=1
  8.         if !b! EQU 1 echo;%%a
  9. )
复制代码

评分

参与人数 1技术 +1 收起 理由
BAT221110 + 1 有价值的回复

查看全部评分

 楼主| 发表于 2022-11-10 14:50:49 | 显示全部楼层
回复 1# Batcher


1,
非常感谢!


2,
感谢你的提醒!
看来还需要提高才行。


3,
我认真修改了一下,这次行了吗?
请大神反馈一下!感谢!
发表于 2022-11-10 15:41:39 | 显示全部楼层
回复 8# hfxiang
代码第7、8行互换一下更确切。
发表于 2022-11-10 15:44:21 | 显示全部楼层
回复 10# qixiaobin0715


    这个不能互换,不信你测试一下即知
发表于 2022-11-10 15:52:39 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2022-11-10 16:01 编辑

回复 11# hfxiang
楼主表达不清,我认为是[222]、[333]这2行要么都要删除,要么都保留。
都删除:
  1.         if "%%~a"=="[222]" set /a b=0
  2.         if !b! EQU 1 echo;%%a
  3.         if "%%~a"=="[333]" set /a b=1
复制代码
都保留:
  1.         if "%%~a"=="[333]" set /a b=1
  2.         if !b! EQU 1 echo;%%a
  3.         if "%%~a"=="[222]" set /a b=0
复制代码
 楼主| 发表于 2022-11-10 16:37:31 | 显示全部楼层
本帖最后由 smatenchen 于 2022-11-13 10:10 编辑

回复 8# hfxiang qixiaobin0715 Batcher idwma BAT221110


1,
非常感谢!


2,
要求,
删除 1.txt 里[222]所在行之下,[333]所在行之上的各行,其余要保留。


要删除[222]之下,[333]之上的中间各行。
即,只删除[222]与[333]之间的各行,其余要保留。


再说白一点,我是想删除 1.txt 里的某一段,但文件结构不能改变,
而[222],[333]是文件结构的一部分,故不能删除。


3,

  1. if "%%~a"=="[222]" set /a b=0

  2. if "%%~a"=="[333]" set /a b=1

  3. if !b! EQU 1 echo;%%a
复制代码

这个解法挺巧妙,没想到可以如此轻巧。


比较头疼,批处理命令似乎并不能删除文件里的内容,看似最后也只能用>,
>>去生成所要的新文件,而后再去替换。


4,
你的代码不错,给了我很大的提示。感谢!


我之前想了好久,感觉其解法代码会很复杂,且最后,也就只能用>,
>>去生成所要的新文件,而不能直接删除原文件 1.txt 里的内容。


现在看来,我把问题想得过于复杂了,没找到巧妙的解法。


5,
感谢大神们的帮忙,似乎问题差不多有解法了。
非常感谢!
 楼主| 发表于 2022-11-10 16:48:23 | 显示全部楼层
本帖最后由 smatenchen 于 2022-11-11 21:45 编辑

回复 12# qixiaobin0715 hfxiang Batcher


1,
非常感谢!


2,
各位大神的解法,都不错,我觉得。


3,
非常感谢!
发表于 2022-11-10 16:50:34 | 显示全部楼层
回复 8# hfxiang
你必须把代码交代的清清楚楚明明白白的,他才会明白。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 12:08 , Processed in 0.024036 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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