标题: [文本处理] [已解决]统计ping的返回信息的批处理代码怎么老提示"此时不应有delims"? [打印本页]
作者: gmwd18 时间: 2012-2-27 20:10 标题: [已解决]统计ping的返回信息的批处理代码怎么老提示"此时不应有delims"?
本帖最后由 gmwd18 于 2012-2-28 17:38 编辑
下面是小弟最近写的一个统计ping的返回信息的一个批处理中的一段代码,但是运行后总是提示此时不应有delims,我找不出原因,
请各位大大帮忙看下,不胜感谢!
先说明一下,ip.txt里面是存放的要ping的ip,ip的存放格式为 地名:ip地址,每个ip 一行;\request文件夹下存放的是以Ip地址命名的txt文件,每个文件里面是ping的返回信息,
第二个for那里的\<统计信息\>是为了匹配ping返回信息里的字符串,因为我的系统是win7中文版,现在我想统计一下每个ip的丢包率,代码如下:- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=: tokens=1,2" %%e in (%~dp0\ipinfo\ip.txt) do (
- set rep=%%e
- set repo=%%f
- echo !repo!
- for /f "delims=:" %%g in ('findstr /n "\<统计信息\>" "%~dp0\request\!repo!.txt"') do (
- set cou=%%g
- echo !cou!
- for /f "skip=%cou% delims=: tokens=2" %%h in (%~dp0\request\!repo!.txt) do (
- set str=%%h
- set str=!str:~-9,-1!
- echo !str!
- )))
- pause
复制代码
现在就是第三个for 执行不下去,总提示此时不应有delims,我找不出哪里错了,请大家帮忙看看,谢谢了!
作者: find 时间: 2012-2-27 20:39
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=: tokens=1,2" %%e in (%~dp0\ipinfo\ip.txt) do (
- set rep=%%e
- set repo=%%f
- echo !repo!
- for /f "delims=:" %%g in ('findstr /n "\<统计信息\>" "%~dp0\request\!repo!.txt"') do (
- set cou=%%g
- echo !cou!
- call :sub !cou!
- )
- )
- pause
- goto :eof
-
- :sub
- for /f "skip=%1 delims=: tokens=2" %%h in (%~dp0\request\!repo!.txt) do (
- set str=%%h
- set str=!str:~-9,-1!
- echo !str!
- )
复制代码
作者: powerbat 时间: 2012-2-27 20:56
变量延迟 与 for的运行机制 不是那么简单。
只是“统计一下每个ip的丢包率”的话,不需要那么复杂:- @echo off
- for /f "tokens=1,3 delims=:" %%a in ('findstr.exe 丢失 request\*.txt') do (
- echo %%~na %%b
- )
- pause
复制代码
作者: CrLf 时间: 2012-2-28 03:23
问题源于- for /f "skip=%cou% delims=: tokens=2" %%h in
复制代码
这一句中,%cou% 在预处理时是空变量致错。
楼主应该摆脱两个误区:- 首先,%cou% 这种类型的变量是最先被扩展的,它的优先级在解释、划分语句之前,如果想在解释语法之后、执行语句之前将变量扩展,请使用变量延迟,这是基础,一定要掌握的。
- 其次,for 的参数在预处理之前就必须给定,循环之中无法改变,这个也许比较难明白,不过你写多了代码自然能感觉得到冥冥之中有这么一个规则存在...
复制代码
作者: guaiwu 时间: 2012-2-28 16:01
同上。 赞同skip参数不能有变量来代替, 就连delims也不能。
作者: gmwd18 时间: 2012-2-28 17:33
回复 4# CrLf
一语中地阿,让我这个菜鸟受教学习了,问题解决了,再次感谢!
作者: gmwd18 时间: 2012-2-28 17:35
回复 3# powerbat
确实如此,已经根据你的意见修改了代码,谢谢了!
作者: gmwd18 时间: 2012-2-28 17:36
再次感谢楼上的各位高手的帮助,谢谢你们,问题解决了~
作者: find 时间: 2012-2-28 18:33
回复 5# guaiwu
2楼那种写法算不算变量呢?
作者: guaiwu 时间: 2012-2-29 10:30
回复 9# find
2楼的命令.... 也许是小弟肤浅。 同求真谛
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |