0

我有这个代码:

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至少会有一个空闲驱动器,因此,没有可用驱动器的事实是不正确的。

编辑:我添加了用于映射驱动器的行。

4

2 回答 2

2

根据您使用环境变量的确切位置,这可能会发生请记住,cmd 在命令的解析状态下扩展环境变量。任何带有括号的命令本身就是一个大命令。因此,您在上面发布的是一个命令,并且任何环境变量在 cmd读取它时都会立即展开,而不是在执行时展开。

为了避免这种情况,请尝试放置一个

setlocal enabledelayedexpansion enableextensions

在批处理文件的顶部,并使用环境变量!D!而不是%D%.

于 2009-11-12T09:18:11.713 回答
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%
于 2009-11-12T09:34:54.743 回答