变量不是第一次从批处理脚本中的输入分配
Variable not being assigned first time from input in a batch script
所以我试图询问用户是否要覆盖当前的虚拟机(如果已经存在)。我已将此 .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 变量,因此它进入 "you did not enter y or n" 部分。从这里回到起点,重新经过
真正奇怪的是,下次你通过时,如果你选择 "y",它会按照它的意思去做!但是,如果您选择 "n",它仍然可以使用 "y"!
每次我输入任何内容时,它总是在返回到 :checkOverwrite 之前获取输入,而不是最新的输入。为什么??
您的问题是,尽管尝试启用延迟扩展(使用 setlocal enabledelayedexpansion
),但您实际上并没有使用它。
%var%
是正常的变量扩展,即使打开了延迟扩展。
您需要使用!var!
进行延迟变量扩展。参见(例如)"documentation" here.
所以我试图询问用户是否要覆盖当前的虚拟机(如果已经存在)。我已将此 .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 变量,因此它进入 "you did not enter y or n" 部分。从这里回到起点,重新经过
真正奇怪的是,下次你通过时,如果你选择 "y",它会按照它的意思去做!但是,如果您选择 "n",它仍然可以使用 "y"!
每次我输入任何内容时,它总是在返回到 :checkOverwrite 之前获取输入,而不是最新的输入。为什么??
您的问题是,尽管尝试启用延迟扩展(使用 setlocal enabledelayedexpansion
),但您实际上并没有使用它。
%var%
是正常的变量扩展,即使打开了延迟扩展。
您需要使用!var!
进行延迟变量扩展。参见(例如)"documentation" here.