2015-08-18 59 views
2

我需要鎖定一個文件,並不斷在Windows 7上寫入內容。 目標:當使用排它鎖寫入文件時,會有一個SFTP計劃從另一臺服務器上提取此文件。我們需要驗證文件是否被部分拉動,即使文件上存在Exclusive Lock。 使用下面的批處理腳本,但我如何獲得30秒到1分鐘的鎖?如何使用Windows批處理腳本專門鎖定文件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 

回答

0

對於:main例程的生存期,SAMPLEFILE.csv上有一個獨佔寫鎖定。一旦:main例程返回,該鎖就會釋放。您可以通過添加延遲返回的命令來延長鎖的長度。例如,timeout 60 /nobreak >nul會延遲鎖定釋放1分鐘。但我不明白你有什麼好處。

鎖只能防止其他進程寫入文件。任何進程在鎖定時仍然可以讀取部分文件。有可能detect if a file is locked by another process,但我不認爲這將有助於您的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 
+0

謝謝dbenham。您的腳本可以獨家使用,但正如您所提到的那樣,SFTP過程仍然能夠讀取部分文件。 – Kiran

相關問題