Board logo

标题: 一个根据文本内容执行命令的BAT [打印本页]

作者: Mnyoll     时间: 2008-4-2 00:40    标题: 一个根据文本内容执行命令的BAT

我们网吧最近装了个IE记录器 这几天想看看收银机都上了什么网站 打开文本一看 傻了眼了 密密麻麻都是字符 看都看不清 更别说找出想要的 也难怪,100多台机啊 我就想写一个BAT 可以提取某个IP的浏览记录 同时过滤了一些正常的像"google.cn"的网站名 可要写就遇到一个问题 就是我要把想过滤掉不看的网站名写在一个文本文件上,让BAT调用这个文本文件 来达到过虑的目的 在这里我就写不出了 IE浏览记录文件内容是这样的 时间 IE地址 就像 00:00:00 www.uuu9.com/ 00:00:01 www.google.cn/ 00:56:45 E:\ ...... 在这里我要去掉"google.cn"和"E:\"这两行 我把"google.cn"和"E:\"写在a.txt文件上 但写好了就调用不出了 不是调用出来了是空文本就是根本没调用 气死了 特来请教各位,谢谢了(要知道想过滤掉不看的网址是几十个的,不可能一一写在BAT上)

作者: Climbing     时间: 2008-4-2 01:23
你要写一下你自己是如何调用的?还有a.txt文件的格式是如何的? 你刚才已经顶了我签名中的帖子,应该仔细看过了,但基本上还是犯了低级错误,那就是没有交待清楚你是如何操作的。

作者: Mnyoll     时间: 2008-4-3 01:28
不好意思,忘了 a.txt文件是这样写的: google.cn E:\ .... 要过滤多少就写多少行 我原先写了一个就是把要过滤的网站名全写进这个BAT里: @echo off type ieuse.log |findstr ":192.168.0.30:" >a.txt for /f "tokens=2,4" %%a in (a.txt) do @echo %%a %%b>>b.txt del a.txt type b.txt |findstr /v "baidu.com" >a.txt del b.txt type a.txt |findstr /v "google.cn" >b.txt ....... 结果写得这个BAT大得要死 大家可以到我的FTP里看下 ftp://218.16.251.34:8002 账号:1 密码:123 其实我是想自己写的(自己写可以多多体会这里面的含义) 可偏偏在这一关过不了 我是新手 可能以后还有一些问题到时候再问 还望各位多多包含

作者: Climbing     时间: 2008-4-3 08:58
你上面的批处理中a.txt的内容只是过滤的中间结果,现在我们假设你的过滤定义文件叫filter.txt,内容如下: google.cn E:\ ... 我写的代码如下:
@echo off
type ieuse.log |findstr ":192.168.0.30:" >a.txt
for /f "tokens=2,4" %%a in (a.txt) do @echo %%a %%b>>src.txt
del a.txt
copy src.txt target.txt
for /f "tokens=*" %%a in (filter.txt) do ( 
    type target.txt | find /i/v "%%a" > tmp.txt
    ren tmp.txt target.txt)
echo src.txt是需要处理的文件,target.txt则是过滤后的最终文件。
问题的关键就在于按过滤文件循环处理src.txt,将其中不包括过滤记录的内容提取出来,然后在下一循环中继续处理。

作者: Mnyoll     时间: 2008-4-6 23:16
这两天去扫墓了 这个我试了下好象不行啊

作者: logan0279     时间: 2008-4-8 13:41
去你的网盘看了下,发现你那个命名有点乱哈,那个过滤定义文件和你批处理里面的一个临时文件重了! 下面是我写的代码,你看一下达的到你的要求不(我试验了一下,是可以通过的!) @echo off findstr ":192.168.0.30:" ieuse.log >a.txt for /f "tokens=2,4" %%a in (a.txt) do @echo %%a %%b>>b.txt del a.txt set ch=0 for /f %%d in (filter.txt) do if %ch%==0 call :_ch0 %%d else call :_ch1 %%d if exist a.txt ren a.txt target.txt if exist b.txt ren b.txt target.txt start target.txt exit :_ch0 set /a ch+=1 findstr /i /v %1 b.txt >a.txt del b.txt :_ch1 set /a ch-=1 findstr /i /v %1 a.txt >b.txt del a.txt 这里把那个过滤定义文件名(即你网盘里存在的那个a.txt)改为filter.txt了,最后的文件命名为target.txt!比起Climbing达人的代码多了些!呵呵! [ Last edited by logan0279 on 2008-4-9 at 12:02 PM ]