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