use*_*154 4 windows cmd locking batch-file
我有一个项目,我需要监视批处理文件,该文件不断运行以查看它是否仍然有效.我有一台远程机器需要监视在另一台服务器上运行的批处理文件.
我需要做的是让批处理文件创建并独占锁定一个文本文件(可以是空的,可以是满的并不重要).这是我可以从我的远程机器(使用由c#创建的exe)轮询它以查看文件是否有独占锁 - 如果是,则不执行任何操作.如果可以获得锁定,则发出警报(因为批处理失败).
理解这可能不是最好的方法,但不幸的是它是我必须要做的.那么,有没有办法使用批处理文件独占锁定文件?
我最初对此持怀疑态度,但事实证明它可以通过使用文件重定向来完成.考虑这个例子:
@echo off
if '%1' == '-lock' (
shift
goto :main
)
call %0 -lock > lockfile.txt
goto :eof
:main
echo %DATE% %TIME% - start
TREE C:\
echo %DATE% %TIME% - finish
goto :eof
Run Code Online (Sandbox Code Playgroud)
上述批处理正在运行时,无法删除lockfile.txt.
基本上,批处理检查'-lock'参数.如果它不存在,它将使用-lock参数重新执行自身并将其自己的输出重定向到lockfile.txt
也可以为批次中的"关键"部分创建锁定,例如
@echo off
echo %DATE% %TIME% - started
(
echo Starting TREE
tree c:\
echo TREE finished
) > lock2.lock
echo %DATE% %TIME% - finished
Run Code Online (Sandbox Code Playgroud)
资料来源:
http://www.dostips.com/forum/viewtopic.php?p=12454