Batch file 批嵌套代码不正确?
每当我运行这段代码时,cmd都会说命令的语法不正确并关闭。我认为嵌套中的嵌套是允许批量的。有什么我做错了吗?整个IF构造被解析为一个块,所有变量在开始时只计算一次Batch file 批嵌套代码不正确?,batch-file,cmd,nested,Batch File,Cmd,Nested,每当我运行这段代码时,cmd都会说命令的语法不正确并关闭。我认为嵌套中的嵌套是允许批量的。有什么我做错了吗?整个IF构造被解析为一个块,所有变量在开始时只计算一次 您可以重新排列代码,而不使用循环和变量,或者必须使用SETLOCAL EnabledLayedExpansion和!成本而不是%cost%(例如)用于在循环构造中设置的任何变量。这在功能上应与代码相同。 它对在循环中创建的变量使用延迟展开 if %CHO%==1 ( set cost=35 if %GP% GEQ %c
您可以重新排列代码,而不使用循环和变量,或者必须使用SETLOCAL EnabledLayedExpansion和
!成本代码>而不是%cost%
(例如)用于在循环构造中设置的任何变量。这在功能上应与代码相同。
它对在循环中创建的变量使用延迟展开
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
)
)
注意if compare中的/i
,它使compare不区分大小写。
此外,比较术语周围的引号将防止简单的回车键破坏代码。它还允许使用两个单词的术语。您是在.cmd文件中编写游戏吗?你考虑过其他语言吗?无论如何,你需要提供更多的信息。。。哪里失败了?我实际上使用了多个cmd文件,它们相互调用并相互编辑,以“保存”您的进度。我决定从头开始制作一个游戏,不使用任何程序。它是用.bat文件编写的。当我输入1并运行此代码时,它就会出错。批处理解释器是一个不是由您编写的程序。无论如何,请确保变量确实存在。谢谢!我能修好它。事实上,我发现setlocal EnableDelayedExpansion不是必需的,代码运行良好,在嵌套代码中设置的变量周围只有感叹号。它一定已经启用了延迟扩展。很高兴你修好了。
@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
)