Seu método é preferível e perfeitamente aceitável. FileSystemWatcher
desperdiça recursos, até mais do que o seu loop.
Mesmo que você faça o loop com um atraso de um segundo, você ainda será totalmente imperceptível em qualquer monitor de processo que mede a carga da CPU ou do disco rígido.
BTW, você pode usar o comando timeout
em vez de sleep.exe
.
Além disso, você tem alguns erros de digitação no seu código:
:waitloop
IF EXIST "scanning.done" GOTO waitloopend
timeout /t 1
goto waitloop
:waitloopend
Algumas informações sobre "recursos desperdiçados" podem ser encontradas aqui: link ; o ponto principal é que poderia ser não confiável. Mas tenho que admitir, minha resposta vai principalmente dos anos de prática e experiência.