并发,批

    技术2022-05-20  37

    http://blog.csdn.net/scz123/archive/2006/08/15/1065622.aspx

     

     

    大家都知道,批处理中运行的都是一步步单进程执行, 但如果进程执行比较慢,如PING一个不通的IP地址,那就会大大影响批处理程序的执行效率。

      如下内容将简单举例,在WINDOWS下使用批处理做多进程并发,以达到“多线程”的效果。

      例:需要PING 192.168.0.1到192.168.0.254的所有IP地址,并将是否能PING通的结果输出到log.txt

      实现如下:

    rem 主程序.bat,只需一行代码,调用checkip.bat,经测试,CPU2.6G MEM1G可并发40个左右的进程 for /l %%i in (1,1,254) do (start /min cmd /c checkip.bat 192.168.0.%%i)

    rem  checkip.bat内容如下: ping  %1  -n  1 if  % errorlevel % == 0   ( echo   %1  alive >> log . txt )   else   ( echo   %1  dead >> log . txt )

     

    @@@@@@@@@@@@

    想做个检查局域网都有哪些机器开着的批处理 先做了个这样的

    复制内容到剪贴板
    代码:
    @echo off for /l %%a in (2,1,254) do ( echo 192.168.0.%%a ping 192.168.0.%%a /n 1 |find "TTL"&&(echo 192.168.0.%%a >>result.dat) ) goto :eof

    发现速度太慢了 后来又改成这样的

    复制内容到剪贴板
    代码:
    @echo off for /l %%a in (2,1,254) do ( echo 192.168.0.%%a ping 127.0.0.1 -n 1 start /min cmd /c "ping 192.168.0.%%a /n 1 |find "TTL"&&(echo 192.168.0.%%a >>d:/result.txt)" ) goto :eof

    使用多线程的   发现这样开的窗口太多了   加个 ping 127.0.0.1 -n 1是因为怕开的太快机器响应不过来 但还是觉得进程太多了    有没有其他更好的办法实现这个功能 在网上找了下  没发现其他批处理的实现多线程的方法 @echo off set /p network=请输入网络号(例如:192.168.1): for /l %%i in (1 1 254) do (      start /b ping %network%.%%i>nul&echo 连接:%network%.%%i ) arp -a|find /v "00-00-00-00-00-00" pause

     

     

     

    %%%%

    批处理中运行的都是一步步单进程执行, 但如果进程执行比较慢,如PING一个不通的IP地址,那就会大大影响批处理程序的执行效率。

      如下内容将简单举例,在WINDOWS下使用批处理做多进程并发,以达到“多线程”的效果。

      例:需要PING 1.1.1.15 到1.1.1.50的所有IP地址,并将是否能PING通的结果输出到IPList.txt

    Main.bat

    @Echo off date /t > IPList.txt time /t >> IPList.txt echo =========== >> IPList.txt For /L %%f in (15,1,50) do (start /min cmd /c MultiThreadPing.bat 1.1.1.%%f)

    @Echo on

     

    MultiThreadPing.bat

    ping %1 -n 1 if %errorlevel%==0 (echo %1 alive >> IPList.txt) else (echo %1 dead >> IPList.txt)

    本文来自博客,转载请标明出处:http://blog.csdn.net/scz123/archive/2006/08/15/1065622.aspx


    最新回复(0)