我在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。
这里发生了什么以及该目标如何 - “检查,如果存在驱动器,如果没有,请稍等一下再检查一下。” - 实现了吗?
答案 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:
命令检查卷是否可用。