[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 smatenchen 于 2022-11-11 22:18 编辑


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


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

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


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


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


3,
请大神们帮忙!感谢!

本帖最后由 smatenchen 于 2022-11-10 14:54 编辑

回复 1# Batcher

1,
请大神帮忙!感谢!

TOP

本帖最后由 smatenchen 于 2022-11-10 14:55 编辑

回复 1# qixiaobin0715

1,
请大神帮忙!感谢!

TOP

回复 2# smatenchen


回复 2# Batcher

即使手工写一个,也没用,论坛程序不会通知的。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 4# Batcher

TOP

回复 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. ……
复制代码

TOP

回复 6# hfxiang


1,
非常感谢!


2,
感谢大神出手帮忙!


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


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


请试试,只用批处理去解题的方法。

TOP

回复 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

评分人数

TOP

回复 1# Batcher


1,
非常感谢!


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


3,
我认真修改了一下,这次行了吗?
请大神反馈一下!感谢!

TOP

回复 8# hfxiang
代码第7、8行互换一下更确切。

TOP

回复 10# qixiaobin0715


    这个不能互换,不信你测试一下即知

TOP

本帖最后由 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
复制代码

TOP

本帖最后由 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,
感谢大神们的帮忙,似乎问题差不多有解法了。
非常感谢!

TOP

本帖最后由 smatenchen 于 2022-11-11 21:45 编辑

回复 12# qixiaobin0715 hfxiang Batcher


1,
非常感谢!


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


3,
非常感谢!

TOP

回复 8# hfxiang
你必须把代码交代的清清楚楚明明白白的,他才会明白。

TOP

返回列表