Ich mache es ungefähr so.
Code:
@echo off
::Parameter:
:. semaphore: Name der Sperrdatei, die erstellt wird
:: maxwait: maximale Anzahl an Durchläufen der Warteschlange bis zum Abbruch
:: delay: Verzögerung pro Durchlauf in Sekunden
:: debug: wenn 1, werde ein paar Ausgaben erzeugt, sonst bleibt die Batch stumm
set semaphore="c:\lock"
set maxwait=30
set delay=2
set debug=0
:: Start der eigentlichen Batch
:: --------------------------------------------------
set loop=1
:Start
if %debug%==1 (echo %loop%)
if Exist %Semaphore% (Goto :Warten)
:: Sperre setzen
echo "1" >>%Semaphore%
if %debug%==1 (echo Sperre gesetzt)
:: Hier kommt der immer nur einzeln zu betreibende Programmblock hin
:: -----------------------------------------------------------------------
:: Sperre entfernen und beenden
del %semaphore%
if %debug%==1 (echo Sperre entfernt)
Goto :EOF
:Warten
set /a loop=%loop%+1
if %loop% gtr %maxwait% (Goto :EOF)
Ping -n %delay% 127.0.0.1 > NUL
Goto Start