バッチ内の「マルチスレッド」処理コード

2041 ワード

以下の例では、WINDOWSの下でバッチを使用してマルチプロセスを同時実行し、「マルチスレッド」の効果を達成します.
例:PING 192.168.0.1から192.168.0.254までのすべてのIPアドレスが必要であり、PINGが通じるかどうかの結果をlogに出力する.txt
次のようになります.
remメインプログラムbat、1行のコードだけでcheckipを呼び出す.bat,テスト,CPU 2.6 G MEM 1 Gは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)

以上の資料に基づいて、私は自分で修正して、1つのメインプログラムだけでコードを実行することができます:プログラムの進化
 
  
@echo off
if "%1"=="" (for /l %%a in (1,1,100) do (start /min cmd /c %0 10.120.6.%%a&ping 127.0.0.1 -n 1>nul))
if not "%1"=="" (ping -a %1 -n 1|find "reply" /i&&echo alive %1>>LogIP.txt||echo dead %1>>LogIP.txt)

コードが長すぎて読みやすいように、私は2行に分けて、実は1行で完成することができます.自分で修正して、直接cmdウィンドウで実行する文を書いて、もしあなたが書けないならば、また私に聞いてもいいです.プログラムの知識点の説明:
1.パラメータが空か否かを判断する.startコマンドを使用して、gotoとcallの違いに注意してください.pingを使用して遅延4を行う.findコマンドを使用してIPが起動するかどうかを判断し、ログに記録する.プロンプト情報は出力を禁止します.
プログラムの再進化は、実行するたびにログファイルを空にするために、次のようにコードを変更します.
 
  
@echo off
if "%1"=="" (
if exist "logip.txt" del LogIp.txt
for /l %%a in (1,1,100) do (start /min cmd /c %0 10.120.6.%%a&ping 127.0.0.1 -n 1 1>nul))
if not "%1"=="" (ping -a %1 -n 1|find "reply" /i&&echo alive %1>>LogIP.txt||echo dead %1>>LogIP.txt)

もちろん、2つのbatファイルを使用したい場合は、直接2行のコードを2つのファイルに書くことができます.各ファイルに1行書いてもいいです.
説明:
1.for文の最後に、ping 127.0.0.1-n 1 1 1>nul、-n 1はping 1回、後の1>nulは正常情報リダイレクト禁止出力、具体的なブログ内容の他の文章ハンドルリダイレクトがある.2.文if exist"logip.txt"del LogIp.txtはecho[%date%%time%]>LogIpを用いることができる.txtに取って代わって、それらの2つの文の作用は同じで、具体的に使うのは個人の使い方を見て以上自分のいくつかの心得で、自分が忘れることを恐れて、ここに記録します.
補足参照jack_Meng