4

我有 .bat 将在同一时刻启动 X 次(使用不同的参数)。我希望他们修改一个特定的文件,但必须以可控的延迟顺序完成。理想情况下,我需要一种机制,只允许一个蝙蝠锁定文件并在需要时处理它,而不是释放它,允许另一个进程使用相同的东西。

4

2 回答 2

7

对杰布的回答进行了一些改进。

不需要额外的锁定文件。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
于 2013-05-18T06:42:29.967 回答
4

它可以通过文件锁来完成,由 Dostips 的dbenham 描述:具有批处理的并行进程SO:您如何在 Windows 下共享日志文件?.

由于windows在打开一个写句柄时锁定了一个文件,相互尝试访问该文件会导致错误。

第一个进程可以访问该文件并对其进行写入,第二个进程无法打开它并将循环直到第一个进程完成。

:lockedAppend
2>nul (
  >queue.lock (
    >>queue.txt echo All text I want
  )
)||goto :lockedAppend
于 2013-05-18T06:02:06.480 回答