2016-10-24 5 views
0

バッチファイルが21個の別々のファイル(すべて非常に大きい)をダウンロードしています。私はいくつかのファイルがより良い(良い解決策ではない)を取得しようとする前に終了することを許可するためにタイムアウトがあり、それらがすべて一緒に実行される場合、私のシステムリソースをすべて使用し、すべてが停止します。FORループによって起動されるバッチファイルの制限数

FORループに/ WAITを置くことができます。その後、一度に1つのダウンロードタスクしか起動しません。 5つのダウンロードウィンドウを起動したいと思います。終了したら、次の5に進みます。終了するまでGOTOを使用しようとしましたが、動作しません。

rem *****Step 1***** 
set tstart=0 
set tend=5 
set incr=1 
FOR /L %%a IN (%tstart%,%incr%,%tend%) DO (start /ABOVENORMAL GET_PIECE_ENSEMBLE.bat %newformatdate% 0%%a %HH%) 
timeout /t 30 

:WAIT 
if exist flagfile.* goto WAIT 

それから私は、ファイル5-10をダウンロードする4つの以上のステップを持っている11-16、などしかし、それはダウンロードして、余分な長いを取る場合、スクリプトに沿って移動し、次への複数のファイルや移動のダウンロードを開始すべてのデータを最初にダウンロードする必要があります。私はここで2つのことを試しています:データがダウンロードを開始したことを確認するための短いタイムアウト(フラグファイルが存在する)と、フラグファイルが存在するのを待つ。しかし、待機は機能していない、スクリプトはまだ一緒に移動し、次の束をダウンロードし始めます。私の回避策はタイムアウトを600に設定することでしたが、データをダウンロードするのに10分以上かかったり、時にはハングアップして2時間かかります。すべての部分が一度に起動すると、ワークステーションがフリーズし、マシンを再起動する必要があります。

そして、ここではGET_PIECE_ENSEMBLEのコード、FORループで実行されるスクリプトです:上のアドバイスをお探し

set "newformatdate=%1" 
set "ename=%2" 
set "HH=%3" 
echo %time% > flagfile.%ename% 
wget -O C:/Data/DataFile_%HH%.%ename%.grb2 http://url/%newformatdate%.grib2 
del flagfile.%ename% 

のいずれかの作業(任意のアイデアを「flagfileが存在する場合は待機」の作り方なぜこのISN単純な引数があれば、FORループに入れてインスタンスの数を制限し、他の人が開始する前にダウンロードが終了するようにすることができますか?確かに、ネットワークの状態が非常に変化するタイムアウト間隔で推測するよりも優れた解決策があります。 GET_PIECE_ENSEMBLE

+0

したがって、5回以上実行するのではなく、5つの完全なセットが完了するまで待ってから、次の5つのセットに移動しますか? – SomethingDark

+0

いずれにしても、私はちょうど2つ以上(帯域幅を利用するため)を起動したいが、あまりにも多く、非常に遅くなり、ワークステーションをクラッシュさせるため、21個全てを起動したくない。 –

答えて

0

はflagfilesをカウントし、5以上があるが、1秒を遅らせるべき

... 
set "HH=%3" 
:only5 
set /a running=0 
for /f %%c in ('dir /b/a-d flagfile.* 2^>nul') do set /a running+=1 
if %running% geq 5 (
timeout /t 1 >nul 
goto only5 
) 
echo %time% > flagfile.%ename% 
... 

を試みます。

フラグファイルが1つ削除されるとすぐに、アクティブになる次のキューファイルは、インプロセスファイルの数を5に戻し、他のキュープロセスをブロックします。

+0

フラッグファイルはダウンロード接続が完了するまで作成されないので、21ウィンドウはすべて一度に起動します。これには数秒かかります。 –

+0

私は21がすべて起動されることに同意しますが、 'wget'が実行される前にフラグファイルを作成する必要があります。したがって、5つの' wget'だけを並行して実行する必要があります。私はなぜダウンロードファイルが作成されるまでフラグファイルが生成されないのか分かりません。それは 'wget'が実行される前に生成されるべきです。さらに説明してください。 – Magoo

0

未テスト!

:: Start with list of files to download as parameters 
:: down.cmd "file1" "file2" "file3" etc.. 
@echo off 
set "url=http://host.com" 
:loop 
for /f %%a in ('tasklist /FI "imagename eq wget.exe" /FI "windowtitle eq _download*" /FO csv /NH ^| find /C "wget"') do (
if %%a LEQ 5 (
      start "_download" "%path%\wget.exe" -O "%~1" "%url%/%~1" 
      shift 
      ) 
timeout /T 5 
if not "%~1"=="" goto loop 
関連する問題