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 )
@@@@@@@@@@@@
想做个检查局域网都有哪些机器开着的批处理 先做了个这样的
复制内容到剪贴板发现速度太慢了 后来又改成这样的
复制内容到剪贴板使用多线程的 发现这样开的窗口太多了 加个 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