批處理實現多線程執行命令列表
工作中碰到多線程執行命令列表的情況,研究一番,編寫出來與大家分享。高手看了也請指點,指教一些更簡單的辦法。
批處理是一種單線程的簡單腳本,只有上條命令執行完后,才能執行下條命令。如果上條命令執行花費很長時間,如超時,連接失敗不斷嘗試等,下一條命令頭發白了,可能還等不到它執行。
百度問答上找到一個方法可以實現多線程,原理:利用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腳本來編寫。
如果工作中碰到類似的需求,只要把上面代碼稍加修改就可以用了。