Chinaunix首页 | 论坛 | 博客
  • 博客访问: 451037
  • 博文数量: 101
  • 博客积分: 1547
  • 博客等级: 上尉
  • 技术积分: 1072
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-12 23:46
个人简介

music,code,dialog,rest

文章分类

全部博文(101)

文章存档

2023年(8)

2022年(25)

2021年(6)

2020年(2)

2019年(6)

2018年(4)

2017年(5)

2016年(20)

2015年(4)

2014年(2)

2013年(1)

2012年(1)

2011年(1)

2010年(1)

2009年(2)

2007年(10)

2006年(3)

分类:

2007-03-05 14:08:57

Cping 是测试网段中网元是否存活的工具。
 
最近利用CmdShell实现了一次。
 
由于cmd中for语句的嵌套功能的局限,利用batch文件解决了for语句的嵌套。
 
运行时,只要cping 网段号 地址个数 | findstr live 就可以列出所有存活地址。
 
例如: cping 10.10.10 254 | findstr live
即可列出10.10.10 网段从 1 到 254 的所有存活地址。
 
 
外套,即主程序。

@echo off
rem main()
setlocal
REM cping.bat
if "%1" == "" goto default1
set seg=%1 goto main1
:default1
set seg=10.0.0
rem echo %seg% goto main1
:main1
if "%2" == "" goto default2
set num=%2
goto main2
:default2
set num=254 goto main2
:main2
for /l %%i in (1,1,%num%) do (
 call inner.bat %seg% %%i
)
endlocal
echo on

 
内套, inner.bat
 

@echo off
for /f "skip=3 tokens=1 usebackq" %%A in (`ping -n 1 -l 1 %1.%2`) do (
                rem echo %%A
                if not "%%A"=="Request" goto alive
                echo %1.%2 is dead.
                goto next
                :alive
                echo %1.%2 is alive.
                :next
                rem noop
)

 
 
zenith 2007.3.5
 
最近研究了一下cmd,发现Call还可以这样写更简洁。
 

@echo off
rem cping.bat
rem main()

setlocal

if not "%1" == "" (
    set seg=%1
) else (
    set seg=10.0.0
)

if not "%2" == "" (
    set num=%2
) else (
    set num=254
)

for /l %%i in (1,1,%num%) do (
    call :innerloop %seg% %%i
)

endlocal

goto :eof

:innerloop

for /f "skip=3 tokens=1 usebackq" %%A in (`ping -n 1 -l 1 %1.%2`) do (

        if not "%%A"=="Request" goto alive
        echo %1.%2 is dead.
        goto next
        :alive
        echo %1.%2 is alive.
        :next
        rem noop
)
goto :eof
@echo on
 
 
zenith 2007.4.6
阅读(3179) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~