Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批嵌套代码不正确?_Batch File_Cmd_Nested - Fatal编程技术网

Batch file 批嵌套代码不正确?

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

每当我运行这段代码时,cmd都会说命令的语法不正确并关闭。我认为嵌套中的嵌套是允许批量的。有什么我做错了吗?

整个IF构造被解析为一个块,所有变量在开始时只计算一次


您可以重新排列代码,而不使用循环和变量,或者必须使用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
)