if %CHO%==1 (
set cost=35
if %GP% GEQ %cost% (
echo Do want to replace %WEP% with Broadsword?
set /p CHO=
if %CHO%==yes (
set /a GP=%GP%-35
set WEP=Broadsword
goto weapon
)
if %CHO%==Yes (
set /a GP=%GP%-35
set WEP=Broadsword
goto weapon
)
if %CHO%==no goto weapon
if %CHO%==No goto weapon
)
if %GP% LSS %cost% (
echo You don't have enough GP!
pause
goto weapon
)
)每当我运行此代码时,cmd都会说命令的语法不正确并关闭。我以为在巢内筑巢是可以批量进行的。我做错什么了吗?
发布于 2014-01-28 12:19:39
整个IF构造被解析为一个块,并且所有变量在开始时只计算一次。
您可以在没有循环和变量的情况下重新排列代码,或者必须使用SETLOCAL ENABLEDDELAYEDEXPANSION,并对循环构造中设置的任何变量使用!cost!而不是%cost% (例如)。
发布于 2014-01-29 05:58:28
这在功能上应该与您的代码相同。
它对循环中创建的变量使用延迟扩展。
@echo off
setlocal EnableDelayedExpansion
if "%CHO%"=="1" (
set cost=35
if %GP% GEQ !%cost! (
echo Do want to replace %WEP% with Broadsword?
set /p CHO=
if /i "!CHO!"=="yes" (
set /a GP=%GP%-35
set WEP=Broadsword
) else (
echo You don't have enough GP!
pause
)
)
goto weapon
)注意if比较中的/i,这使得比较大小写不敏感。
此外,围绕比较术语的引号将防止简单的enter键按下您的代码。它也允许使用两个词。
https://stackoverflow.com/questions/21405329
复制相似问题