I have .bat that would be started X times (with different arguments) at the same moment. I would like them to modify one specific file but it has to be done in sequence with controllable delay. Ideally I would need mechanism that would allow only one bat to lock the file and process it as long as it's needed than release it allowing same thing for another process.
A few improvements to jeb's answer.
There is no need for an extra lock file. The queue.txt file can serve as its own lock.
Also, the innermost block must be guaranteed to exit with SUCCESS (errorlevel 0) so that the retry only occurs when the redirection failed. (CALL )
(note the trailing space) is a totally non-intuitive, yet extremely efficient way to clear any error. Not needed here, but (CALL)
(note the lack of space) is an efficient way to set an error.
:lockedAppend
2>nul (
>>queue.txt (
REM Do any amount of processing within this block.
REM All stdout will safely be appended to the queue
REM You could even call out to a subroutine, or another batch file
echo Any text you want
REM The CALL below ensures that the block exits with ERRORLEVEL 0 - success
(call )
)
)||goto :lockedAppend
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With