批处理 - 与if语句并发

时间:2014-10-29 01:23:23

标签: batch-file

我正在进行批量游戏,而我正在开店。我正在做出选择'购买'以及我的问题。

在此命令块中:

if %ans% == 1 (
if %inv% LEQ %maxinv%-=0.8 (
    set /a inv=%inv%+=0.8
    set deaglespace=1

    if %money% GEQ 800 (
        set /a money=%money%-=800
        set deaglemoney=1

    ) else (goto eamount)
) else ( goto tooinv )

if deaglespace==1 (
    if deaglemoney==1 (
        goto deagleseccbuy
    )
)
)

我试图检查您是否有足够的money和足够的inventory空间,但它无法正常工作......无法找到解决方法这个问题......

感谢您的尝试!

2 个答案:

答案 0 :(得分:1)

if %ans% == 1 (
if %inv% LEQ %maxinv%-=0.8 (
    set /a inv=%inv%+=0.8

SET /A仅适用于整数,因此set /a inv=%inv%+=0.8无效。 if %inv% LEQ %maxinv%-=0.8这将导致字符串比较。IF命令不进行计算,因此您需要第二个变量:

if %ans% == 1 (
set /a temp_var=maxinv-=8
if %inv% LEQ %temp_var% (
    set /a inv=inv+=8

答案 1 :(得分:0)

除了整数问题之外,你的代码还有很多问题。

在一个区块(带括号的系列语句)中,var的任何变体可见,直到退出eblock - 并且这适用于来自开括号的整个块最后一条匹配关闭的第一行。

有一种方法可以克服这个问题 - 您需要调用delayed expansion选项。这意味着您需要包含命令

setlocal enabledelayedexpansion

问题是 - 在哪里?

执行setlocal后,对环境的任何更改都将是暂时的 - 当匹配的endlocal 程序到达终止时,它将被撤消文件。有一些方法可以克服这个问题,但在程序一开始就直接在setlocal enabledelayedexpansion之后简单地调用@echo off会更容易。

如果你这样做,那么在一个块中,%var%似乎包含外部块开头的变量值(在嵌套块的情况下不包含任何内部块)但{ {1}}将包含更改后的值。

您的下一个问题是!var!这样的陈述。 if deaglespace==1 ( 永远不会等于deaglespace。如果变量1的值为%deaglespace%,则1 可能等于deaglespace。如果您调用1,则delayedexpansion的值可能为!deaglespace!

另一个问题是,如果您使用1来访问!deaglespace!的当前值,那么可能包含哪些内容?它可以从之前的一些操作中设定吗?它根本没有价值吗?如果它没有值,deaglespace将被评估为if !deaglespace!==1,这将产生语法错误。您应该在代码中明确设置值。

你的变量可能有一些对你来说很明显的名字,但它们对我来说没有任何意义,所以你想要做的事情远离我。如果你的意思是你必须拥有8个单位的空间和800个单位的钱,那么你需要在一个临时变量中建立你的自由空间(不要使用 temp tmp - 这些对命令处理器有特殊含义)你可以使用

if ==1

(我经常使用if "%ans%"=="1" ( set /a $1=%maxinv%-%inv% set /a $2=%money% - 800 ) if "%ans%"=="1" ( if %$1% lss 0 (echo Insufficient inventory space&goto tooinv) if %$2% lss 0 (echo Insufficient money&goto eamount) set /a money=$2 set /a inv+=8 goto deagleseccbuy ) 作为临时变量名的前缀。其中有两个,与您使用的$deaglespace相同

注意deaglemoney语法使对象变量名周围的set /a可选。

另外:%分隔命令

并且:您没有说明&是如何设置的。如果它使用ans设置,那么请记住用户可以在响应中键入任何内容,因此最好引用双方并执行字符串比较。如果您确定set /p不为空并且它不包含空格或其他对命令解释器具有特殊含义的字符,请随意使用原始表单。

相关问题