Board logo

标题: [文本处理] [已解决]批处理怎样批量删除指定字符串之后的内容 [打印本页]

作者: zxzl    时间: 2010-5-24 10:54     标题: [已解决]批处理怎样批量删除指定字符串之后的内容

如题,当前文件夹下有很多TXT文件,很多TXT文件中含有“-----------”这几个字符,现在想批量处理一下所有包含“-----------”的TXT文件,把“-----------”之后的内容全部删除,之前的内容保留,批处理该怎么写呢?

问题已解决,见9楼del的代码

[ 本帖最后由 zxzl 于 2010-5-24 15:49 编辑 ]
作者: hanyeguxing    时间: 2010-5-24 12:07

1,-----------这个内容是是否必定在一行内,还是跨行?
2,是删除-----------后的一这行的内容,还是删除-----------后所有行的内容?
3,是否保留-----------这一部分?
作者: del    时间: 2010-5-24 12:14

  1. @echo off
  2. set "str=-----------"
  3. for /f "delims=" %%s in ('findstr /m /c:"%str%" *.txt') do (
  4.     findstr /n .* "%%s" > "%temp%\.tmp"
  5.     (
  6.         for /f "usebackq delims=" %%t in ("%temp%\.tmp") do (
  7.             set var=%%t
  8.             SetLocal EnableDelayedExpansion
  9.             if "!var:%str%=!" neq "!var!" (
  10.                 for /f "delims=" %%L in ("!var:%str%=!") do set var=%%L
  11.             )
  12.             echo,!var:*:=!
  13.             EndLocal
  14.         )
  15.     ) > "%%s"
  16. )
  17. del "%temp%\.tmp"
复制代码
如果要保留 -----------,请把 set var=%%L 改成 set var=%%L%str%

[ 本帖最后由 del 于 2010-5-24 12:23 编辑 ]
作者: zxzl    时间: 2010-5-24 12:41

DEL兄,这个"delims="是什么乱码?
作者: del    时间: 2010-5-24 13:34     标题: 回复 4楼 的帖子

是退格符,可以改成任意文件中不存在的字符。
作者: zxzl    时间: 2010-5-24 14:24

原帖由 del 于 2010-5-24 13:34 发表
是退格符,可以改成任意文件中不存在的字符。


试了一下,这个代码只能把“-----------”这个字符串去掉,“-----------”之后的内容还在,是怎么回事呢
作者: del    时间: 2010-5-24 14:37     标题: 回复 6楼 的帖子

我这里测试正常。你是否修改了代码,如果没有,可否上传个样本?
作者: zxzl    时间: 2010-5-24 15:19

原帖由 del 于 2010-5-24 14:37 发表
我这里测试正常。你是否修改了代码,如果没有,可否上传个样本?


又试了一下,“-----------”后紧接文本的时候可以将实现删除,但是“-----------”如果是单独一行的话只会把“-----------”删除,我的目的是把“-----------”之后的所有行全部删除,不是只删除包含“-----------”字符串的一行,呵呵,有点拗口了
作者: del    时间: 2010-5-24 15:34     标题: 回复 8楼 的帖子

  1. @echo off
  2. set "str=-----------"
  3. for /f "delims=" %%s in ('findstr /m /c:"%str%" *.txt') do call :sub "%%s"
  4. del "%temp%\.tmp"
  5. exit /b
  6. :sub
  7. findstr /n .* %1 > "%temp%\.tmp"
  8. (
  9.     for /f "usebackq delims=" %%t in ("%temp%\.tmp") do (
  10.         EndLocal
  11.         set var=%%t
  12.         SetLocal EnableDelayedExpansion
  13.         if "!var:%str%=!" neq "!var!" (
  14.             for /f "delims=" %%L in ("!var:%str%=!") do set var=%%L
  15.             echo,!var:*:=!
  16.             goto :eof
  17.         )
  18.         echo,!var:*:=!
  19.     )
  20. ) > %1
复制代码

作者: CUer    时间: 2010-5-24 15:36

  1. sed -i "1,/-----------/!d" *.txt
复制代码

作者: zxzl    时间: 2010-5-24 15:48

感谢DEL的代码,这下问题解决了




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