windows - 如何使用批处理文件获得文件的独占锁?

标签 windows batch-file cmd locking

我有一个项目,我需要监控一个不断运行的批处理文件,看看它是否仍在运行。我有一台远程机器需要监控在另一台服务器上运行的这个批处理文件。

我需要做的是让批处理文件创建并独占锁定一个文本文件(可以是空的,也可以是满的,没关系)。这样我就可以从我的远程机器(使用由 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

当上述批处理正在运行时,无法删除 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

来源:

How do you have shared log files under Windows?

http://www.dostips.com/forum/viewtopic.php?p=12454

关于windows - 如何使用批处理文件获得文件的独占锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25121516/

相关文章:

java - 从 cmd 启动 Java 应用程序有效,从批处理不

c++ - CWnd::ScreenToClient 安全吗?

java - 批处理 : Use first file of type in directory as variable

batch-file - 我如何让 Else 在 Batch 中工作?

cmd中的Java unicode字符错误

windows - 为什么 cmd 在我使用 && 时运行我的第二个命令,即使第一个命令失败了?

c++ - "BeginPaint"函数如何知道更新区域-windows编程?

windows - 我无法打开现有的 windows azure 项目

windows - 使用批处理文件打开 Internet 选项,打开连接选项卡,按确定

redirect - PowerShell 中 cmd 的输入重定向