Board logo

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

作者: qq114527345    时间: 2011-1-7 21:03     标题: [已解决]批处理如何删除特定两个字符之间的段?

有一个很大的文本文件,里面包含有特殊字符[\\]@=.,""%/-等
请问如何用批处理删除两个特定字符之间的段落(包括特定字符所在行)呢?
如:
  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 编辑 ]
作者: Batcher    时间: 2011-1-8 01:33

  1. sed -i "/sf\.sdfw/,/BN\\asdf\\cxvb/d" 1.txt
复制代码

作者: qq114527345    时间: 2011-1-8 19:46

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


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

[ 本帖最后由 qq114527345 于 2011-1-8 20:43 编辑 ]
作者: qq114527345    时间: 2011-1-8 19:53

我用你给你这句写了个完整的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%
复制代码

作者: hanyeguxing    时间: 2011-1-8 22:34

%aa%在 if 或 for  的子句中设置并调用,需要开启变量延迟
作者: qq114527345    时间: 2011-1-9 09:56

我试过了,开启变量延迟
setlocal enabledelayedexpansion
加上这句结果也是一样会出错的,生成的一样是空文件
作者: qq114527345    时间: 2011-1-9 10:01

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

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

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

解决办法就是先用写字板把注册表文件另存为ANSI编码的文件!
作者: Batcher    时间: 2011-1-10 22:17     标题: 回复 8楼 的帖子

没有这个必要,用type命令就行了。
作者: qq114527345    时间: 2011-1-11 17:12

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


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

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




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2