Windows “有什么用?”;。锁;在批处理文件中执行多线程时?

Windows “有什么用?”;。锁;在批处理文件中执行多线程时?,windows,multithreading,batch-file,cmd,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,以及为什么它小于等于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

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

输出流9通常不存在,输出将是空文件“wait1000.lock1”和“wait1000.lock2”(假设本例中
%random%
为1000)

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

顺便说一句,示例文件中缺少标签
:Wait


它应该在FOR循环之前插入,FOR循环不是比较表达式,而是输出流9的重定向。
语法
9>=
毫无意义,因为
=
在这里没有意义,因为它将被删除

输出流9通常不存在,输出将是空文件“wait1000.lock1”和“wait1000.lock2”(假设本例中
%random%
为1000)

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

顺便说一句,示例文件中缺少标签
:Wait


它应该在FOR循环之前插入

。锁是一个文件扩展名,永远不会与9进行比较。与环境变量%lock%进行比较。根本没有任何比较
9>=
在语法上等同于
9>
,这是一个文件重定向操作。如果此代码的目的是等待所有已启动的进程结束,则在中给出了一个简单得多的解决方案。lock是一个文件扩展名,永远不会与9进行比较。与环境变量%lock%进行比较。根本没有任何比较
9>=
在语法上等同于
9>
,这是一个文件重定向操作。如果此代码的目的是等待所有启动的进程结束,那么在感谢您的回答中会给出一个更简单的解决方案,这非常有帮助。感谢您的回答,这非常有帮助。