Board logo

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

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

我们网吧最近装了个IE记录器
这几天想看看收银机都上了什么网站
打开文本一看
傻了眼了
密密麻麻都是字符
看都看不清
更别说找出想要的
也难怪,100多台机啊
我就想写一个BAT
可以提取某个IP的浏览记录
同时过滤了一些正常的像"google.cn"的网站名
可要写就遇到一个问题
就是我要把想过滤掉不看的网站名写在一个文本文件上,让BAT调用这个文本文件
来达到过虑的目的
在这里我就写不出了
IE浏览记录文件内容是这样的
时间 IE地址 就像
00:00:00 http://www.uuu9.com/
00:00:01 http://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 ]