我有这段代码:
FOR %%d IN (c d e f g h i j k l m n o p q r s t u v w x y z) do (
IF NOT EXIST %%d:\ (
echo Free drive %%d
set D=%%d:
)
)
echo d=%D%
echo Using %D% to map remote drive
subst %D% /d
subst %D% \\path_to_drive
之后我使用D
变量来映射一个免费的驱动器。问题是,当我第一次运行它并尝试映射驱动器时,脚本认为D变量是未定义的,或者什么都不包含。如果我在脚本结束时打印它的值,使用:
set D
我发现它找到了一个驱动器,它有它的价值。当我第二次运行脚本时,它将按预期工作。它让我疯狂,批处理认为变量未定义,并且在脚本完成它的执行后它有一个值。我还想补充说,这是使用D
变量的唯一部分,并且ALWAYS
至少有一个免费驱动器,因此,没有可用驱动器的事实是是的。
编辑:我添加了用于映射驱动器的行。
答案 0 :(得分:2)
根据 where 确切地使用环境变量,这可能会发生。请记住,cmd会在命令的解析状态下扩展环境变量。任何带括号框的命令本身都是一个大的命令。所以你上面发布的是一个命令,当cmd 读取时,会立即展开任何环境变量,而不是在执行它时。
为了避免这种情况,请尝试添加
setlocal enabledelayedexpansion enableextensions
位于批处理文件的顶部,并使用!D!
代替%D%
的环境变量。
答案 1 :(得分:1)
这对我有用,你能看到它在你的设置上是否适合你,你能告诉我们你如何引用D?
FOR %%d IN (c d e f g h i j k l m n o p q r s t u v w x y z) do (
IF NOT EXIST %%d:\ (
echo Free drive %%d
set D=%%d:
)
)
echo %D%