发博文
zenith

grei.blog.chinaunix.net

   
个人资料
  • 博客访问:76791
  • 博文数量:17
  • 博客积分:1512
  • 博客等级:上尉
  • 注册时间:2006-01-12 23:46:59
订阅我的博客
  • 订阅
  • 订阅到鲜果
  • 订阅到抓虾
  • 订阅到Google
字体大小: 博文
Cping (cmd shell )版本 (2007-03-05 14:08)
分类: Windows

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

亲,您还没有登录,请[登录][注册]后再进行评论