首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批嵌套代码不正确?

批嵌套代码不正确?
EN

Stack Overflow用户
提问于 2014-01-28 12:10:21
回答 2查看 53关注 0票数 0
代码语言:javascript
复制
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都会说命令的语法不正确并关闭。我以为在巢内筑巢是可以批量进行的。我做错什么了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-28 12:19:39

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

您可以在没有循环和变量的情况下重新排列代码,或者必须使用SETLOCAL ENABLEDDELAYEDEXPANSION,并对循环构造中设置的任何变量使用!cost!而不是%cost% (例如)。

票数 1
EN

Stack Overflow用户

发布于 2014-01-29 05:58:28

这在功能上应该与您的代码相同。

它对循环中创建的变量使用延迟扩展。

代码语言:javascript
复制
@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键按下您的代码。它也允许使用两个词。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21405329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档