中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 一个根据文本内容执行命令的BAT
作者:
标题: 一个根据文本内容执行命令的BAT 上一主题 | 下一主题
Mnyoll
初级用户




积分 75
发帖 32
注册 2007-6-11
状态 离线
『楼 主』:  一个根据文本内容执行命令的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上)

2008-4-2 00:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 2 楼』:  

你要写一下你自己是如何调用的?还有a.txt文件的格式是如何的?

你刚才已经顶了我签名中的帖子,应该仔细看过了,但基本上还是犯了低级错误,那就是没有交待清楚你是如何操作的。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2008-4-2 01:23
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
Mnyoll
初级用户




积分 75
发帖 32
注册 2007-6-11
状态 离线
『第 3 楼』:  

不好意思,忘了
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
其实我是想自己写的(自己写可以多多体会这里面的含义)
可偏偏在这一关过不了
我是新手
可能以后还有一些问题到时候再问
还望各位多多包含



学习中
2008-4-3 01:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 4 楼』:  

你上面的批处理中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,将其中不包括过滤记录的内容提取出来,然后在下一循环中继续处理。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2008-4-3 08:58
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
Mnyoll
初级用户




积分 75
发帖 32
注册 2007-6-11
状态 离线
『第 5 楼』:  

这两天去扫墓了
这个我试了下好象不行啊



学习中
2008-4-6 23:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
logan0279
初级用户





积分 100
发帖 45
注册 2007-12-11
状态 离线
『第 6 楼』:  

去你的网盘看了下,发现你那个命名有点乱哈,那个过滤定义文件和你批处理里面的一个临时文件重了!
下面是我写的代码,你看一下达的到你的要求不(我试验了一下,是可以通过的!)

@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 ]

2008-4-8 13:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: