中国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 www.uuu9.com/ 00:00:01 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
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

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


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



论坛跳转: