因此,我试图询问用户是否要覆盖当前的虚拟机(如果已经存在)。我已将此 .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
这个概念是第一个如果总是返回为真(因为在这种情况下这些变量永远不会相等)并且从那里它会询问他们是否要覆盖机器。如果他们说“y”,您应该看到“覆盖”,然后按任意键继续...
问题是它没有这样做!它似乎没有设置 machineOverwrite 变量,因此它正在进入“您没有输入 y 或 n”部分。从这里它又回到了起点,然后又经历了一遍。
真正奇怪的是,下次你通过时,如果你选择“y”,它会做它的意思!但是,如果你选择“n”,它仍然可以用“y”做它应该做的事情!
每次我输入任何内容时,它总是从返回 :checkOverwrite 之前获取输入,而不是最新的输入。为什么??