我需要独占锁定文件,并持续在Windows 7上向其写入内容。目标:当用独占锁定写入文件时,有一个SFTP计划可从另一个服务器提取此文件。即使文件上有排他锁,我们也需要验证文件是否被部分拉出。使用以下批处理脚本,但是如何获得30秒到1分钟的锁定?
@echo off
if '%1' == '-lock' (
shift
goto :main
)
call %0 -lock > SAMPLEFILE.csv
goto :eof
:main
ping -n 30 127.0.0.1 > nul
echo %DATE% %TIME% - start
TREE C:\
echo %DATE% %TIME% - finish
goto :eof
在:main
例程的生存期内,SAMPLEFILE.csv上有一个排他的写锁定。:main
例程返回后,将释放锁定。您可以通过添加命令延迟返回来延长锁的长度。例如,timeout 60 /nobreak >nul
将锁释放延迟1分钟。但是我看不出你有什么好处。
该锁仅阻止其他进程写入文件。任何进程都可以在被锁定时读取部分文件。可以检测文件是否被另一个进程锁定,但是我认为这对您的SFTP服务器没有帮助。
我认为防止文件的部分下载的最简单方法是在SFTP帐户无法访问但位于相同卷上的文件夹中创建文件。文件完成后,您可以通过MOVE命令将其立即移动到正确的位置。在完成MOVE之前,该文件将对SFTP不可见,因此不会存在部分下载的风险。请注意,只有在同一卷中的两个文件夹之间移动时,这才是瞬时的。
顺便说一句,您的脚本无需使用-lock
参数来调用自身。您可以通过:main
直接调用来获得相同的效果。
@echo off
call :main %* >SAMPLEFILE.csv
exit /b
:main
ping -n 30 127.0.0.1 > nul
echo %DATE% %TIME% - start
TREE C:\
echo %DATE% %TIME% - finish
exit /b
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句