变量没有从批处理脚本的输入中第一次赋值



所以我试图询问用户是否想要覆盖已经存在的当前虚拟机。我已经将这个.bat文件的问题部分提取到一个单独的文件中以复制问题。

这个文件的代码是:

@echo off
@setlocal enabledelayedexpansion
SET test=blah
SET existingMachines=blahsdg
:checkOverwrite
if not "%test%"=="%existingMachines%" (
    SET /P machineOverwrite="A machine containing this name already exists. Do you want to overwrite it (y/n)? "
    if /I "%machineOverwrite%"=="y" (
        echo overwrite
    ) else (
        if /I "%machineOverwrite%"=="n" (
            echo You will need to choose a new name for your virtual box or overwite the existing one.
        ) else (
            echo WARNING: You did not enter y or n
            GOTO :checkOverwrite
        )
    )
)
pause

的概念是,第一个if总是返回为真(因为这些变量在这种情况下永远不会相等),从那里它会询问他们是否想要覆盖机器。如果显示"y",您应该看到"overwrite",然后按任意键继续…

问题是它没有这样做!它似乎没有设置machineOverwrite变量,因此它将进入"您没有输入y或n"部分。从这里返回到开始,再经过一遍。

真正奇怪的是,下次你经过的时候,如果你选择了"y",它就会发挥它的作用!但是,如果你选择"n",它仍然会做"y"应该做的事情!

每次我输入任何东西,它总是从返回:checkOverwrite之前获取输入,而不是最新的输入。为什么? ?

您的问题是,尽管尝试启用延迟扩展(使用setlocal enabledelayedexpansion),但您实际上并没有使用它。

%var%是正常的变量膨胀,即使延时膨胀开启

需要使用!var!进行延迟变量扩展。请看(例如)这里的"documentation"

相关内容

  • 没有找到相关文章

最新更新