在.bat / .cmd程序中的块中更改变量

时间:2014-11-12 01:53:07

标签: windows batch-file cmd

我在.bat中设计了一个简单的程序(顺便说一句,与DOS相同的是.bat吗?)会让用户猜测二次方的X值,然后我遇到了一个问题,即丢失了操作数错误,如下面代码中的注释所示。

@echo off
setlocal enabledelayedexpansion
:top
set /p q=Take a guess:
if %q% equ 67 (
  echo YOU GOT IT! CONGRATULATIONS! The equation was "Y=17*[X-67]*[X-67]+166"
  pause
  EXIT
)
if NOT %q% equ 67 (
  echo try again.
  ::The problem is definitely in the line below this one.
  set /a r=17*(%q%-67)*(%q%-67)+189
  echo The resulting Y value is %r%
  pause
  goto top
)

我应该更改什么,以便程序将正确的值存储到r?

2 个答案:

答案 0 :(得分:2)

嗯,从逻辑上来说,要达到if not %q% equ 67语句,q必须不是-67;但修复这个小缺陷会掩盖这个问题。

你有if-not-67声明

if NOT %q% equ 67 (
...
... bad idea to use ::-comments within a block...
set /a r=17*(%q%-67)*(%q%-67)+189
...
...
...
)

问题是)语句中的第一个set正在关闭if not ...(您需要在)中转义set ^)每个r

都有一个主要的插入符号

您的nxt问题将是因为您在阻止[{1}}到if not .. 67 (之内设置了goto top ),因此您无法使用{{1}访问其更改后的值但必须使用%r% - 您可以方便地使用!r!嗯 - 实际上,您可以使用

enabledelayedexpansion

但更容易使用

call echo The resulting Y value is %%r%%

答案 1 :(得分:0)

本作品:

@echo off
title written by XLR8 from http://sd-storage.weebly.com
:top
set /p q=Take A Guess
if %q%==67 goto correct
goto incorrect

:correct
echo YOU GOT IT! CONGRATULATIONS! The equation was "Y=17*[X-67]*[X-67]+166"
Echo Press Any Key To Exit
pause >nul
EXIT

:incorrect
echo try again.
goto top

set r=17*(%q%-67)*(%q%-67)+189
echo The resulting Y value is %r%
echo Press Any Key To Start Again
pause >nul
goto top