我有.bat这将开始X次(不同的论点)在同一时间。 我希望他们修改一个特定的文件,但必须按照可控的延迟顺序进行。 理想情况下,我需要一种机制,只允许一只蝙蝠locking文件,并在需要时进行处理,而不是释放它,以允许另一个进程执行相同的操作。
jeb的答案有一些改进。
不需要额外的锁定文件。 queue.txt文件可以作为自己的锁。
此外,必须保证最内部的块以SUCCESS(错误级别0)退出,以便重试仅在重定向失败时才会发生。 (CALL )
(注意尾随空格)是一种完全不直观,但非常有效的方法来清除任何错误。 这里不需要,但(CALL)
(注意缺少空间)是设置错误的有效方法。
: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
可以用dbenham在Dostips中描述的文件锁来完成:批处理和并行处理 :你如何在Windows下共享日志文件? 。
当一个写入句柄被打开时,当Windows锁定一个文件时,彼此试图访问该文件将导致错误。
第一个进程可以访问该文件并写入,第二个进程无法打开它,并将循环直到第一个进程完成。
:lockedAppend 2>nul ( >queue.lock ( >>queue.txt echo All text I want ) )||goto :lockedAppend