批處理實現多線程執行命令列表文件


批處理實現多線程執行命令列表

 

工作中碰到多線程執行命令列表的情況,研究一番,編寫出來與大家分享。高手看了也請指點,指教一些更簡單的辦法。

批處理是一種單線程的簡單腳本,只有上條命令執行完后,才能執行下條命令。如果上條命令執行花費很長時間,如超時,連接失敗不斷嘗試等,下一條命令頭發白了,可能還等不到它執行。

百度問答上找到一個方法可以實現多線程,原理:利用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腳本來編寫。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM