实现多线程时批处理文件中“.lock”的用途是什么?

时间:2016-11-14 07:56:39

标签: windows multithreading batch-file cmd

这是代码。由于我是批处理脚本的新手,我无法理解为什么使用 .lock 以及为什么它小于等于 9

set "lock=%temp%\wait%random%.lock"

start "" cmd /c 9>="%lock%1" abcd.bat 4441 %tempdate%

start "" cmd /c 9>="%lock%2" pqrs.bat 4442 %tempdate%

for %%N in (1 2 3 4 5 6 7 8 9) do (

        9>="%lock%%%N" || goto :Wait

) 2>nul

1 个答案:

答案 0 :(得分:4)

9>不是比较表达式,它是输出流9的重定向 语法9>=是无意义的,因为=在这里没有意义,因为它将被删除。

输出流9通常不存在,输出将为空文件“wait1000.lock1”和“wait1000.lock2”(假设%random%在这种情况下为1000)。

FOR循环只是测试它是否可以写入同一个文件,这将被阻止,直到批处理文件退出并且写锁定将被释放。
虽然至少有一个文件被锁定,但命令9>"%lock%%%N"失败,然后goto :wait将被执行。

顺便说一下。您的示例文件中缺少标签:Wait
 它应该在FOR-loop之前插入