21 개의 별도 파일 (모두 매우 큰 파일)을 다운로드하는 배치 파일이 있습니다. 일부 파일을 더 좋은 (좋은 해결책이 아닌) 얻으려고하기 전에 끝내기 위해 시간 초과가 있습니다. 그리고 모두 함께 실행하면 모든 시스템 리소스를 사용하고 모든 것이 중단됩니다.FOR 루프에서 시작한 배치 파일의 수 제한
FOR 루프에/WAIT을 넣을 수 있습니다. 그러면 한 번에 하나의 다운로드 작업 만 시작됩니다. 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, 11-16, 다운로드 할 수있는 4 개의 단계를하지만 다운로드 여분의 긴 걸리는 경우, 스크립트는 다음에에 더 많은 파일 또는 이동 다운로드를 따라 이동하고 시작 프로세스는 모든 데이터를 먼저 다운로드해야합니다. 나는 여기에 2 가지 일을 시도하고있다 : 데이터가 다운로드되기 시작하기위한 짧은 시간 제한 (flagfile이 존재하기 때문에)과 flagfile이 존재하면 기다린다. 그러나 기다림이 효과가 없으면 스크립트는 계속 움직여 다음 무리를 다운로드하기 시작합니다. 제 해결 방법은 시간 제한을 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 't working?) 또는 간단한 인자가 있다면 FOR 루프에 인스턴스 수를 제한하여 다른 사람들이 시작하기 전에 다운로드가 끝나도록 할 수 있습니까? 분명히 시간 초과 간격으로 추측하는 것보다 나은 솔루션이 있습니다.
GET_PIECE_ENSEMBLE
에서
그래서 그 대신, 다섯의 다음 세트로 이동하기 전에 오 명 마감의 완전한 세트까지 기다려야 할 주어진 시간에 다섯 개 실행보다는 더 이상없는의? – SomethingDark
어느 쪽이든, 나는 단지 하나 이상을 (대역폭을 활용하기 위해) 발사하기를 원한다. 그러나 그것들 모두 21 개가 너무 많아서, 모두 매우 느리게 진행되고 워크 스테이션이 충돌하기 때문에 발사하기를 원한다. –