If/then/else语句批量
问题描述:
我试图让脚本显示随机数字(类似于矩阵)几秒钟,然后它变成红色并显示“错误” 我还没有找到正确的语法一个If/then/else语句。任何帮助,将不胜感激If/then/else语句批量
@echo off
color 02
:tricks
set /a counter +=1
echo %random%%random%%random%%random%%random%%random%
if %counter% > %random% * %random% * %random% * %random% * %random% * %random% + 15000 goto error
goto tricks
:error
color 04
:err
echo %error%
goto err
我知道
echo %random%%random%%random%%random%%random%%random%
的作品,但在那之后剩下的就是我遇到什么麻烦。 我用记事本+ +写,我没有办法编译程序,所以我不能看到我犯了什么错误,我只知道它不会运行。 -Much Obliged-
答
你有几个问题。
当在IF
声明做比较,你必须使用GTR
与/I
标志(见if /?
的全部细节):
if /i %counter% GTR [somevalue]
在上面,“someValue中”必须是一个值,而不是计算。例如,你可能想要做这样的事情:
SET /A Target=%RANDOM% + 1500
if /i %counter% GTR %Target% goto error
然而,这创造了一个不同的比较每一次,所以你可能想的逻辑工作一点。
此外,当您打印“错误”(打印无限顺序)只使用echo error
,而不是echo %error%
(这是没有定义,只会说“ECHO关闭”一遍又一遍)。
如果您正在寻找另一种方法来模拟矩阵,那么下面的脚本就可以做到。这完全在你的问题之外,但我只是想给一个工作样本,其中可以做你想做的。
@ECHO OFF
SETLOCAL EnableExtensions EnableDelayedExpansion
COLOR 02
REM Generate 1500 random lines.
FOR /L %%A IN (1,1,1500) DO (
SET Giberish=
REM Generate 79 random numbers to ensure the desired length.
FOR /L %%X IN (1,1,79) DO SET Giberish=!Giberish!!RANDOM!
REM Trim to 79 chars.
REM Since the default console length is 80, 79 will fill the entire line without a break.
SET Giberish=!Giberish:~1,79!
ECHO !Giberish!
)
REM Print linebreaks to move the numbers off the screen.
FOR /L %%A IN (1,1,50) DO ECHO.
COLOR 04
ECHO Error
ENDLOCAL
答
这里是一个稍微有点矩阵式的批处理文件,我修改了一个错误屏幕。这将只回显0,1's
:: Matrix style batch file
@ECHO OFF
@BREAK OFF
:: Number of times to run matrix before error
SET Rotations=75
:: Number of times to flash error
SET ErrorTimes=5
:Matrix
COLOR 02
SET /A A=%random%*2/32767
SET /A B=%random%*2/32767
SET /A C=%random%*2/32767
SET /A D=%random%*2/32767
SET /A E=%random%*2/32767
SET /A F=%random%*2/32767
SET /A G=%random%*2/32767
SET /A H=%random%*2/32767
SET /A I=%random%*2/32767
SET /A J=%random%*2/32767
SET /A K=%random%*2/32767
SET /A L=%random%*2/32767
SET /A M=%random%*2/32767
SET /A N=%random%*2/32767
SET /A O=%random%*2/32767
SET /A P=%random%*2/32767
SET /A Q=%random%*2/32767
SET /A R=%random%*2/32767
SET /A S=%random%*2/32767
SET /A T=%random%*2/32767
SET /A U=%random%*2/32767
SET /A V=%random%*2/32767
SET /A W=%random%*2/32767
SET /A X=%random%*2/32767
SET /A Y=%random%*2/32767
SET /A Z=%random%*2/32767
ECHO %A%%D%%C%%B%%B%%F%%A%%E%%F%%G%%H%%C%%Z%%X%%Y%%F%%E%%R%%B%%M%%Z%%P%%K%%U%%I%%G%%S%%A%%D%%L%%O%%P%%W%%T%%Y%%B%%N%%F%%U%%S%%P%%S%%T%%U%%G%%H%%S%%L%%R%%S%%Q%%W%%E%%R%%T%%V%%B%%N%%O%%U%%I%%L%%P%%S%%F%%E%%C%%X%%Z%%B%%H%%R%%U%%L%%O%%M%%E%%E%%S%
SET /A Matrix+=1
IF %Matrix% LEQ %Rotations% GOTO :Matrix
SET Matrix=0
GOTO :Error
:Error
CLS
COLOR 04
ECHO oooooooooooo ooooooooo. ooooooooo. .oooooo. ooooooooo.
ECHO `888' `8 `888 `Y88. `888 `Y88. d8P' `Y8b `888 `Y88.
ECHO 888 888 .d88' 888 .d88' 888 888 888 .d88'
ECHO 888oooo8 888ooo88P' 888ooo88P' 888 888 888ooo88P'
ECHO 888 " 888`88b. 888`88b. 888 888 888`88b.
ECHO 888 o 888 `88b. 888 `88b. `88b d88' 888 `88b.
ECHO o888ooooood8 o888o o888o o888o o888o `Y8bood8P' o888o o888o
TIMEOUT /T 1 /NOBREAK>NUL
CLS
ECHO.
ECHO.
ECHO.
ECHO.
ECHO.
ECHO.
ECHO.
TIMEOUT /T 1 /NOBREAK>NUL
CLS
SET /A Error+=1
IF %Error% LEQ %ErrorTimes% GOTO :Error
SET Error=0
GOTO :Matrix
批处理文件不编译,它们被解释。你正在运行批处理文件,对吗?你应该得到一个错误。对于语法,查看'if /?'的输出 – Blorgbeard
尝试'if%counter%GRT ...'而不是'if%counter%> ...' – UnknownOctopus
@Blorgbeard没有给出错误消息,它只是打开命令提示然后在不到半秒的时间内关闭它。不,你的解决方案不起作用。 – Prophet