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

[文本处理] 批处理怎样检测文本内容是否有指定关键词?

a.txt里面文本格式如下
k001  158 159  今天1  10 1  60
k001  158 159  昨天  10 1  60
GA0    67  75   星期2       200     20     30
GA0    67  75   烈士       200     20     30
n114       67  75    烈士1   50 5 10
n114      67  75    蜘蛛人   50 5 20
L001  151 75  恶魔  100 1  60
L001  125 39  奴隶  100 15  20

b.txt里面文本格式如下
天下
昨天
火龙
烈士
埃及

要求检测a.txt里面是否含有b.txt里面每行的内容
含有就删除b.txt里面的所在行

  1. @echo off
  2. SETLOCAL enabledelayedexpansion
  3. (
  4. for /f "delims=" %%i in (a.txt) do (
  5. set a=0
  6. for /f "delims=" %%j in (b.txt) do (
  7. set p=%%i
  8. set q=!p:%%j=!
  9. if not !p! == !q! set a=1
  10. )
  11. if !a! == 0 echo %%i
  12. )
  13. )>c.txt
  14. pause
复制代码

TOP

  1. @echo off
  2. SETLOCAL enabledelayedexpansion
  3. (
  4. for /f "delims=" %%i in (b.txt) do (
  5. set a=0
  6. for /f "delims=" %%j in (a.txt) do (
  7. set p=%%j
  8. set q=!p:%%i=!
  9. if not !p! == !q! set a=1
  10. )
  11. if !a! == 0 echo %%i
  12. )
  13. )>c.txt
  14. pause
复制代码
上面是删A。txt
这个是删b.txt里面的内容。道理是一样的

TOP

findstr /v  /g:a.txt  b.txt>>c.txt
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

本帖最后由 kxhcn 于 2011-9-20 20:30 编辑

2楼 3楼的代码有问题 死循环了
c.txt文本的大小在不停的增加

TOP

本帖最后由 hankerer 于 2011-9-20 20:35 编辑
2楼 3楼的代码有问题 死循环了
c.txt文本的大小在不停的增加
kxhcn 发表于 2011-9-20 20:29



我的电脑上运行的好好的   
我发的都是我自己在自己的电脑上试过了

为啥我的电脑上没有问题。发上来的代码老是说有问题?

难道是我用WIN7的原因?

TOP

4楼的代码实现不了啊

TOP

我用3楼的代码实现了
谢谢啊

TOP

回复 3# hankerer
作者从效率的角度考虑,很不错,没用findstr,值得鼓励!
看得多说得多,远比不上写得多。

TOP

回复 7# kxhcn

    要求检测a.txt里面是否含有b.txt里面每行的内容——findstr /i /g:b.txt  a.txt>>c.txt
    含有就删除b.txt里面的所在行——findstr /i /v  /g:a.txt  b.txt>>c.txt
    findstr命令的参数:
/I         指定搜索不分大小写。
/V        只打印不包含匹配的行。
/G:file   从指定的文件获得搜索字符串。 (/ 代表控制台)。

修改了下,具体没试过,自己修改。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 9# weichenxiehou


    按照流行的说法,但文件足够大时,用FOR不如用Findstr。特别是嵌套FOR会严重导致效率下降。不信你找一个几M的文本来试试。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 11# cjiabing
几M的文件没试过,不过前段时间写一个批的时候,用for嵌套写出来的代码在执行效率方面与用findstr比较起来优势明显,呵呵,这个就看个人喜好了,仁者见仁智者见智了。
看得多说得多,远比不上写得多。

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in (b.txt) do set /a b+=1&set b!b!=%%i
  4. for /f %%j in (a.txt) do set /a a+=1&set a!a!=%%j
  5. for /l %%i in (1 1 %b%) do (
  6. for /l %%j in (1 1 %a%) do (
  7. if !b%%i! neq !a%%j! set c=!b%%i!
  8. )
  9. echo !c!>>c.txt
  10. )
  11. pause
复制代码
莫求昨天无悔,但愿今日无愧。

TOP

返回列表