标题: [文本处理] [已解决]批处理如何删除特定两个字符之间的段? [打印本页]
作者: qq114527345 时间: 2011-1-7 21:03 标题: [已解决]批处理如何删除特定两个字符之间的段?
有一个很大的文本文件,里面包含有特殊字符[\\]@=.,""%/-等
请问如何用批处理删除两个特定字符之间的段落(包括特定字符所在行)呢?
如:
- [asdf\asdfw\asdfw.GH\asdf]
- @=asd%sf.sdfw
- [asdf\asdfw\asdfw.GH\asdf\wadf]
- @=asd%sf.dll
- [asdf\asdfw\asdfw.GH\asdf]
- @=asd%sf.355
- [asdf\asdfw\asdfw.BN\asdf\cxvb]
- @=asd%sf.zx
- [asdf\asdfw\asdfw.BN\asdf]
- @=asd%sf.we2
- [asdf\asdfw\asdfw.GH\asdf]
- @=asd%sf.sdfw
- [asdf\asdfw\asdfw.GH\asdf\wadf]
- @=asd%GBSF.dll
- [asdf\asdfw\asdfw.GH\asdf]
- @=asd%sf.88855
- [asdf\asdfw\asdfw.BN\asdf\cxvb]
- @=asd%sf.zx
- [asdf\asdfw\asdfw.BN\asdf]
- @=asd%sf.we2
复制代码
要删除 sf.sdfw 到 BN\asdf\cxvb] 之间的段落要怎样写批处理呢?
[ 本帖最后由 qq114527345 于 2011-1-10 17:21 编辑 ]
作者: Batcher 时间: 2011-1-8 01:33
- 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
-
- @echo off
- ECHO.
- if exist "sed.exe" (
- goto :wd
- ) else (
- ECHO 缺少sed.exe程序
- ECHO 本批处理需要sed.exe命令行工具
- ECHO 请自行下载并与本批处理放在同一目录
- pause
- exit
- )
- :wd
- set /p wd=请输入要处理的[路径]文件名:
- ECHO.
- ECHO 请输入要删除段落的首尾字符
- ECHO 如果输入的字符含有特殊字符则要加转义符\
- ECHO 如sf.sdfw则输入sf\.sdfw
- ECHO 如果是BN\asd则输入BN\\asd
- ECHO.
- set /p aa=请输入首字符:
- set /p bb=请输入尾字符:
- if exist "%wd%" (
- sed -i "/%aa%/,/%bb%/d" %wd%
- ) else (
- ECHO 输入的文件不存在!
- goto :wd
- )
- ECHO.
- ECHO.
- ECHO.
- ECHO 处理完成
- ECHO 请输入要保存的文件名
- ECHO 如果输入已有文件名则同以下↓
- ECHO 直接回车确认默认为原文件名加前缀NEW_
- set ok=NEW_%wd%
- set /p ok=请输入要保存的文件名:
- ren sedDOSSUX %ok%
复制代码
我想请教一下为什么我写成以下格式就会出错呢?
-
- @echo off
- ECHO.
- if exist "sed.exe" (
- goto :wd
- ) else (
- ECHO 缺少sed.exe程序
- ECHO 本批处理需要sed.exe命令行工具
- ECHO 请自行下载并与本批处理放在同一目录
- pause
- exit
- )
- :wd
- set /p wd=请输入要处理的[路径]文件名:
- if exist "%wd%" (
- ECHO.
- ECHO 请输入要删除段落的首尾字符
- ECHO 如果输入的字符含有特殊字符则要加转义符\
- ECHO 如sf.sdfw则输入sf\.sdfw
- ECHO 如果是BN\asd则输入BN\\asd
- ECHO.
- set /p aa=请输入首字符:
- set /p bb=请输入尾字符:
- sed -i "/%aa%/,/%bb%/d" %wd%
- ) else (
- ECHO 输入的文件不存在!
- goto :wd
- )
- ECHO.
- ECHO.
- ECHO.
- ECHO 处理完成
- ECHO 请输入要保存的文件名
- ECHO 如果输入已有文件名则同以下↓
- ECHO 直接回车确认默认为原文件名加前缀NEW_
- set ok=NEW_%wd%
- set /p ok=请输入要保存的文件名:
- 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 |