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

[文本处理] [已解决]批处理如何删除特定两个字符之间的段?

有一个很大的文本文件,里面包含有特殊字符[\\]@=.,""%/-等
请问如何用批处理删除两个特定字符之间的段落(包括特定字符所在行)呢?
如:
  1. [asdf\asdfw\asdfw.GH\asdf]
  2. @=asd%sf.sdfw
  3. [asdf\asdfw\asdfw.GH\asdf\wadf]
  4. @=asd%sf.dll
  5. [asdf\asdfw\asdfw.GH\asdf]
  6. @=asd%sf.355
  7. [asdf\asdfw\asdfw.BN\asdf\cxvb]
  8. @=asd%sf.zx
  9. [asdf\asdfw\asdfw.BN\asdf]
  10. @=asd%sf.we2
  11. [asdf\asdfw\asdfw.GH\asdf]
  12. @=asd%sf.sdfw
  13. [asdf\asdfw\asdfw.GH\asdf\wadf]
  14. @=asd%GBSF.dll
  15. [asdf\asdfw\asdfw.GH\asdf]
  16. @=asd%sf.88855
  17. [asdf\asdfw\asdfw.BN\asdf\cxvb]
  18. @=asd%sf.zx
  19. [asdf\asdfw\asdfw.BN\asdf]
  20. @=asd%sf.we2
复制代码

要删除 sf.sdfw 到 BN\asdf\cxvb] 之间的段落要怎样写批处理呢?

[ 本帖最后由 qq114527345 于 2011-1-10 17:21 编辑 ]
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  1. sed -i "/sf\.sdfw/,/BN\\asdf\\cxvb/d" 1.txt
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

原帖由 Batcher 于 2011-1-8 01:33 发表
sed -i "/sf\.sdfw/,/BN\\asdf\\cxvb/d" 1.txt


谢谢!完全不懂sed呵呵~
请问如果不用sed等第三方工具能否实现呢?

[ 本帖最后由 qq114527345 于 2011-1-8 20:43 编辑 ]

TOP

我用你给你这句写了个完整的P
  1. @echo off
  2. ECHO.
  3. if exist "sed.exe" (
  4. goto :wd
  5. ) else (
  6. ECHO 缺少sed.exe程序
  7. ECHO 本批处理需要sed.exe命令行工具
  8. ECHO 请自行下载并与本批处理放在同一目录
  9. pause
  10. exit
  11. )
  12. :wd
  13. set /p wd=请输入要处理的[路径]文件名:
  14. ECHO.
  15. ECHO 请输入要删除段落的首尾字符
  16. ECHO 如果输入的字符含有特殊字符则要加转义符\
  17. ECHO 如sf.sdfw则输入sf\.sdfw
  18. ECHO 如果是BN\asd则输入BN\\asd
  19. ECHO.
  20. set /p aa=请输入首字符:
  21. set /p bb=请输入尾字符:
  22. if exist "%wd%" (
  23. sed -i "/%aa%/,/%bb%/d" %wd%
  24. ) else (
  25. ECHO 输入的文件不存在!
  26. goto :wd
  27. )
  28. ECHO.
  29. ECHO.
  30. ECHO.
  31. ECHO 处理完成
  32. ECHO 请输入要保存的文件名
  33. ECHO 如果输入已有文件名则同以下↓
  34. ECHO 直接回车确认默认为原文件名加前缀NEW_
  35. set ok=NEW_%wd%
  36. set /p ok=请输入要保存的文件名:
  37. ren sedDOSSUX %ok%
复制代码


我想请教一下为什么我写成以下格式就会出错呢?
  1. @echo off
  2. ECHO.
  3. if exist "sed.exe" (
  4. goto :wd
  5. ) else (
  6. ECHO 缺少sed.exe程序
  7. ECHO 本批处理需要sed.exe命令行工具
  8. ECHO 请自行下载并与本批处理放在同一目录
  9. pause
  10. exit
  11. )
  12. :wd
  13. set /p wd=请输入要处理的[路径]文件名:
  14. if exist "%wd%" (
  15. ECHO.
  16. ECHO 请输入要删除段落的首尾字符
  17. ECHO 如果输入的字符含有特殊字符则要加转义符\
  18. ECHO 如sf.sdfw则输入sf\.sdfw
  19. ECHO 如果是BN\asd则输入BN\\asd
  20. ECHO.
  21. set /p aa=请输入首字符:
  22. set /p bb=请输入尾字符:
  23. sed -i "/%aa%/,/%bb%/d" %wd%
  24. ) else (
  25. ECHO 输入的文件不存在!
  26. goto :wd
  27. )
  28. ECHO.
  29. ECHO.
  30. ECHO.
  31. ECHO 处理完成
  32. ECHO 请输入要保存的文件名
  33. ECHO 如果输入已有文件名则同以下↓
  34. ECHO 直接回车确认默认为原文件名加前缀NEW_
  35. set ok=NEW_%wd%
  36. set /p ok=请输入要保存的文件名:
  37. ren sedDOSSUX %ok%
复制代码

TOP

%aa%在 if 或 for  的子句中设置并调用,需要开启变量延迟
1

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

我试过了,开启变量延迟
setlocal enabledelayedexpansion
加上这句结果也是一样会出错的,生成的一样是空文件

TOP

还有一个很重要的问题,我用写的P处理一个注册表文件
不但没有删除任何东西,而且生成一个全是乱码的文件给我
请问这是怎么回事呢?有什么办法解决吗?

TOP

问题已经找到,因为导出的注册表文件是UNICODE编码的

UNICODE编码的字符在输出为ANSI编码时会错误!

解决办法就是先用写字板把注册表文件另存为ANSI编码的文件!

TOP

回复 8楼 的帖子

没有这个必要,用type命令就行了。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

原帖由 Batcher 于 2011-1-10 22:17 发表
没有这个必要,用type命令就行了。


请问具体怎么用?type命令不是输出显示么?

还有纯批(就是不用sed等第三方工具)怎么实现所要求的功能呢?用for可以么?

TOP

返回列表