CMD如果存在评估时间

CMD如果存在评估时间,cmd,Cmd,我在windows域中有一台计算机,它使用映射的主驱动器I:和一个登录脚本(通过GPO),该脚本应该在该驱动器上执行某些操作。根据我的观察,我猜在映射和登录脚本开始之间似乎存在某种竞争条件: 有时脚本会“找到”映射的驱动器,但在运行时,有时不会。我的方法是重复该测试,直到驱动器最终映射(或者直到我们放弃)。下面是代码: SET /A COUNT_CHECK_I=1 :LOOP_CHECK_I IF NOT EXIST I:\ ( ECHO Attempt %COUNT_CHECK_I%.

我在windows域中有一台计算机,它使用映射的主驱动器I:和一个登录脚本(通过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

这里发生了什么?如何实现“检查,如果驱动器存在,如果没有,请稍等片刻,然后再次检查”的目标?

尝试一下

set“foundI=”
(对于(1 10)中的/l%%a,如果未定义,请执行(
如果%%a lss 10(
>&9回显尝试%%a失败。。。
超时/t2
)否则(
>&9回声放弃。。。
退出/b 1
)
))>nul 2>nul 9>>%LOGFILE%

它只使用
voli:
命令检查卷是否可用

如果找不到映射,则可以在脚本中添加映射,这是一种稍微不同的方法?您可以尝试类似net use i:\\server\share的方法将
net use
放入脚本中的问题是,它可能需要纯文本密码。坏主意。使用
NET USE>>“%LOGFILE%”
查看脚本看到的驱动器映射如何。