首页 > 代码库 > 批处理实现多线程执行命令列表文件

批处理实现多线程执行命令列表文件

批处理实现多线程执行命令列表

 

工作中碰到多线程执行命令列表的情况,研究一番,编写出来与大家分享。高手看了也请指点,指教一些更简单的办法。

批处理是一种单线程的简单脚本,只有上条命令执行完后,才能执行下条命令。如果上条命令执行花费很长时间,如超时,连接失败不断尝试等,下一条命令头发白了,可能还等不到它执行。

百度问答上找到一个方法可以实现多线程,原理:利用bat调用bat来实现多线程。

 

例如:网管希望同时ping局域中所有主机,实现方法如下。

首先,建立两个批处理文件;

1.bat文件代码如下:

 for /l %%i in (2,1,10) do start 2.bat 192.168.0.%%i   

 

2.bat文件代码如下:

ping %1 -n 10

 

运行1.bat后,1.bat调用2.bat,可以实现多线程。测试时可以看到屏幕上刷的出现了一大片的窗口,每个窗口都独立运行。

 

实现了多线程的目标了,下面解决执行命令列表。举个探测端口的例子。网管希望多线程同时执行端口验证的命令。 

把要命令都存放在文件cmdlist.txt中

cmdlist.txt文件代码如下:

telnet 10.1.1.1 22

telnet 10.1.1.1 80

telnet 10.1.1.1 443

telnet 10.1.1.1 8080

 

多线程需要的2个bat ,内容如下:

1.bat文件代码如下:

 for /l %%i in (1,1,4) do start 2.bat %%i 

::一个for循环,从1到4,10是cmdlist.txt中命令的行数,步长为1,调用2.bat,传递参数%%i。 %%i是指cmdlist.txt中命令的序号。不懂的童鞋自己找资料。

 

2.bat文件代码如下:

@echo off ::关闭回显

setlocal enabledelayedexpansion ::变量延迟

for /f "tokens=*" %%i in (cmdlist.txt) do (

set /a  n+=1         ::设置自变量表达式

if "!n!"=="%1" echo %%i|cmd   ::执行第%%i行命令

)

 

批处理语言可读性比较差,问了一些朋友,他们建议用VBS脚本来编写。

如果工作中碰到类似的需求,只要把上面代码稍加修改就可以用了。

批处理实现多线程执行命令列表文件