If statement 批处理随机数生成器-生成与以前相同的数

If statement 批处理随机数生成器-生成与以前相同的数,if-statement,random,batch-file,If Statement,Random,Batch File,基本上,我的代码继续生成相同的数字。我已经关闭了echo以查看问题,实际的%random%变量正在更改,但它似乎进行了计算,并说“不,实际上是这个数字。”下面是代码: set /a num=(24 * %random%) / 32768 + 1 我已经测试了代码本身,它工作得很好。然而,当我将if语句*添加到代码中时,一切都会发生变化。所以,问题是,我如何解决这个问题,为什么会发生这种情况 *我的if声明: if "%num%"=="24" ( echo X set /p ans=

基本上,我的代码继续生成相同的数字。我已经关闭了echo以查看问题,实际的%random%变量正在更改,但它似乎进行了计算,并说“不,实际上是这个数字。”下面是代码:

set /a num=(24 * %random%) / 32768 + 1
我已经测试了代码本身,它工作得很好。然而,当我将if语句*添加到代码中时,一切都会发生变化。所以,问题是,我如何解决这个问题,为什么会发生这种情况

*我的if声明:

if "%num%"=="24" (
  echo X
  set /p ans=
  if "%ans%"=="litin" (
    echo.
    echo Correct!
    pause>nul
    goto generate
  )
)

我所有的if语句都是这样的。

听起来您可能对变量扩展有问题。假设你在循环中做这些事情

尝试在程序顶部添加
setlocal
,如下所示:

setlocal ENABLEDELAYEDEXPANSION
和程序结束时的
endlocal

endlocal
现在,当您需要使用循环中正在更改的变量时,请使用
语法而不是
%

if "!num!"=="24" (
  echo X
  set /p ans=
  if "!ans!"=="litin" (
    echo.
    echo Correct!
    pause>nul
    goto generate
  )
)

听起来您可能对变量扩展有问题。假设你在循环中做这些事情

尝试在程序顶部添加
setlocal
,如下所示:

setlocal ENABLEDELAYEDEXPANSION
和程序结束时的
endlocal

endlocal
现在,当您需要使用循环中正在更改的变量时,请使用
语法而不是
%

if "!num!"=="24" (
  echo X
  set /p ans=
  if "!ans!"=="litin" (
    echo.
    echo Correct!
    pause>nul
    goto generate
  )
)

您可能需要使用
eq
来比较数字。所以试试这个

if "%num%" EQU 24 ( 
    ...
)

您可能需要使用
eq
来比较数字。所以试试这个

if "%num%" EQU 24 ( 
    ...
)

文字:
echo Correct^。不仅仅是环路需要延迟扩展。连接的命令或括号内的多个命令(如IF语句中的命令)也有相同的问题。
文字:
echo Correct^。不仅仅是环路需要延迟扩展。串联命令或括号内的多个命令(如IF语句中的命令)也有相同的问题。