CMD IF EXIST评估时间

时间:2017-02-17 13:06:44

标签: cmd

我在Windows域中有一台计算机使用映射的家庭驱动器我:我有一个登录脚本(通过GPO)应该在该驱动器上执行某些操作。根据我的观察,我猜想在映射和登录脚本的开始之间似乎存在某种竞争条件:

有时,脚本“找到”映射的驱动器,在运行时,有时它不会。我的方法是重复该测试,直到最终映射驱动器(或直到我们放弃)。所以这是代码:

SET /A COUNT_CHECK_I=1
:LOOP_CHECK_I
IF NOT EXIST I:\ (
    ECHO Attempt %COUNT_CHECK_I%... >> %LOGFILE%
    SET /A COUNT_CHECK_I+=1
    IF %COUNT_CHECK_I% GEQ 10 (
        ECHO Giving up... >> %LOGFILE%
        EXIT /B 1
    ) ELSE (
        TIMEOUT /T 30
        GOTO :LOOP_CHECK_I
    )
)
...

(我增加了调试的超时时间。)

日志文件按预期编写 - 每30秒一行。但是,即使映射的驱动器在那里定义,脚本也永远不会意识到这一点。如果手动运行,脚本的行为完全正常,因为IF立即评估为FALSE。

这里发生了什么以及该目标如何 - “检查,如果存在驱动器,如果没有,请稍等一下再检查一下。” - 实现了吗?

1 个答案:

答案 0 :(得分:0)

试一试

set "foundI="
(for /l %%a in (1 1 10) do if not defined foundI (
    vol i: && ( set "foundI=1" ) || if %%a lss 10 ( 
        >&9 echo Attemp %%a failed ...
        timeout /t 2 
    ) else (
        >&9 echo Giving up ...
        exit /b 1
    )
)) >nul 2>nul 9>> %LOGFILE%

它只使用vol i:命令检查卷是否可用。