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

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

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

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

[ 本帖最后由 zxzl 于 2010-5-24 15:49 编辑 ]
1

评分人数

    • namejm: 感谢主动给标题标注[已解决]字样PB + 2

1,-----------这个内容是是否必定在一行内,还是跨行?
2,是删除-----------后的一这行的内容,还是删除-----------后所有行的内容?
3,是否保留-----------这一部分?
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

  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 编辑 ]

TOP

DEL兄,这个"delims="是什么乱码?

TOP

回复 4楼 的帖子

是退格符,可以改成任意文件中不存在的字符。

TOP

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


试了一下,这个代码只能把“-----------”这个字符串去掉,“-----------”之后的内容还在,是怎么回事呢

TOP

回复 6楼 的帖子

我这里测试正常。你是否修改了代码,如果没有,可否上传个样本?

TOP

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


又试了一下,“-----------”后紧接文本的时候可以将实现删除,但是“-----------”如果是单独一行的话只会把“-----------”删除,我的目的是把“-----------”之后的所有行全部删除,不是只删除包含“-----------”字符串的一行,呵呵,有点拗口了

TOP

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

TOP

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

TOP

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

TOP

返回列表