2013-10-22 115 views
2

我需要检查一个文件是否被创建和锁定或使用批处理文件, 如果文件被锁定,程序应该等待并定期检查文件是否从锁中释放,当它被解锁时程序应该退出。如果批处理文件中的条件和for循环

我很新编写批处理文件(今天开始)

这是我曾尝试:

@echo off 
:loop 
if (2<nul (>>test.txt echo off))(
    goto END 
) 
else (goto MESSAGE) 
:MESSAGE 
echo trying to access file 
goto loop 
:END 
pause 
+0

如果你刚开始,并且你有一定的灵活性,我建议使用[tag:PowerShell],而不是。 – David

+0

运行此操作时,结果如何?你有错误吗?如果是这样,请编辑您的问题并添加错误。如果不是,结果如何? – Theresa

+0

我假设你的意思是一个Windows批处理文件,而不是DOS。 – dbenham

回答

2

你接近:)但是你不能用IF直接测试是否命令是否成功。改为使用||条件运算符。

假设你的意思的Windows,而不是DOS:

@echo off 
:loop 
2>nul (
    (call) >>test.txt 
) || (
    echo Trying to access file 
    timeout /nobreak 1 >nul 
    goto loop 
) 

(call)仅仅是执行任何操作,它总是返回成功,一个非常有效的方式。

TIMEOUT引入1秒的延迟来防止循环占用CPU资源。

有关上述工作方式的更多信息,请参阅How to check in command-line if a given file or directory is locked (used by any process)?

+0

嘿,thanx很多答复,但'超时'不被系统识别,所以我通过添加ping 1.1.1.1 -n 5 -w 3000> nul现在它工作正常修改该行。从这里得到它[链接](http://stackoverflow.com/questions/1672338/how-to-sleep-for-5-seconds-in-windowss-command-prompt-or-dos) – user2907999