标题: 批处理如何在命令执行结果中筛选符合条件的并汇总? [打印本页]
作者: qq1178662380 时间: 2010-8-11 10:23 标题: 批处理如何在命令执行结果中筛选符合条件的并汇总?
比如,我有一个dos下可执行的程序:myexe.exe,myexe的执行过程是输入命令“ myexe baidu.com",则会返回一个值“百度一下,你就知道”,即返回输出网页上方的网页标题。
现在,问题是,如何用myexe.exe对文本文件mytxt.txt中的网址进行筛选(mttxt是一个文本文件,每行一个网址,有数千行),根据返回的结果保存。
要求:命令执行3秒钟无结果的,标记为“404”并保存;命令执行3秒钟有结果的,如果为“powered by ***”,则标记为“***bbs”并保存;命令执行3秒钟有结果的,如果不含有“powered by ”的,则标记为“unknow”并保存。
要求执行结果同样是个数千行的文本文件,同mytxt.txt一样,不过每行的内容是“ ***bbs”“404”“unknow”三者其中之一。
那位高手给个大概的代码,我看自己能不能改改完善一下,谢谢!
作者: a6c123 时间: 2010-8-11 12:12
- @echo off
- :: ------------------------ 设置 ------------------------
- set App="myexe.exe"
- set UrlList="mttxt.txt"
- set Output="_执行结果.txt"
- :: ------------------------ /设置 -----------------------
-
- :: 生成用于延时的 vbs
- >"%temp%\delay.vbs" echo WScript.sleep 3000
-
- :: 统计网址数量,以便查看执行进度
- set /a UrlNum = 0, n = 0
- for /f "usebackq" %%a in (%UrlList%) do set /a UrlNum += 1
-
- :: 读取网址列表文件
- for /f "usebackq delims=" %%a in (!UrlList!) do call :Sub "%%a"
-
- del "%temp%\delay.vbs"
- exit /b
-
- :Sub
- :: 显示进度
- set /a n += 1
- title %n%/%UrlNum%
- echo %1
-
- :: 处理网址,并延时
- start "" /b %App% %1 > "%temp%\result.tmp"
- "%temp%\delay.vbs"
-
- :: 如果等待 3 秒后,要强制结束%App%进程,请去掉下一行前面的冒号
- :: for %%a in (%App%) do taskkill /f /im "%%~nxa" >nul 2>nul
-
- :: 读取执行结果
- set Result=
- set /p Result=<"%temp%\result.tmp"
-
- :: 判断执行结果
- >>%Output% (
- if not defined Result (
- echo 404
- ) else (
- if "%Result:powered by =%" neq "%Result%" (
- echo %Result:*powered by =%bbs
- ) else (
- echo unknow
- )
- )
- )
- goto :eof
复制代码
[ 本帖最后由 a6c123 于 2010-8-11 15:41 编辑 ]
作者: qq1178662380 时间: 2010-8-11 15:18
谢谢楼上的高手。还有一个问题,刚才描述的不是很清楚,应该是这样的:
命令执行3秒钟有结果的,如果包含有“powered by ”字样的,比如“***1 powered by ***2”,则标记为“***2bbs”并保存;命令执行3秒钟有结果的,如果不含有“powered by ”的,则标记为“unknow”并保存。
这里重点不是等于“powered by ***”,而是包含,因为结果各种字符串都有,所以上面的那个判定不太适用。这一句代码应该如何改呢?
作者: a6c123 时间: 2010-8-11 15:25 标题: 回复 3楼 的帖子
已修改
.
作者: qq1178662380 时间: 2010-8-11 15:48
请问一下下面这三行的第二行该如何解释啊:
-------------------------------------------------------------------
:: 读取执行结果
set Result=
set /p Result=<"%temp%\result.tmp"
-------------------------------------------------------------------
作者: a6c123 时间: 2010-8-11 15:53 标题: 回复 5楼 的帖子
清空变量 Result 的值。
因为如果 "%temp%\result.tmp" 的内容为空的话,执行 set /p Result=<"%temp%\result.tmp" 后,Result 的值还是之前的,而不是空。
[ 本帖最后由 a6c123 于 2010-8-11 15:59 编辑 ]
作者: qq1178662380 时间: 2010-8-11 16:10
谢谢了,回复真快啊。
本人水平太菜了,就不浪费时间了,仔细研究研究代码吧。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |