为什么我改变颜色的程序不起作用?批量

时间:2017-04-11 11:28:30

标签: batch-file

我试图制作一个改变颜色的程序,但它只是不起作用。 我按任意按钮,它不会改变,然后关闭。我不知道为什么会这样做

@echo off
set letter2=0
:1
set color=%random%
if %color% LSS 10 goto next
goto 1
:next
set letter=%random%
if %random% LSS 6 goto 2
:2 
if %letter% == 0 goto A
if %letter% == 1 goto B
if %letter% == 2 goto C
if %letter% == 3 goto D
if %letter% == 4 goto E
if %letter% == 5 goto F
goto next
:a
set %letterr2% == a
goto final
:b
set %letterr2% == b
goto final
:c
set %letterr2% == c
goto final
:d
set %letterr2% == d
goto final
:e
set %letterr2% == e
goto final
:f
set %letterr2% == f
:final
set realcolor=%letter2%+%color%
cls
color %realcolor%
echo hey this color is %color%
pause>nul
goto 1

3 个答案:

答案 0 :(得分:5)

这里有几件事情。

最大的问题是set:a中的:f语句完全错误。

  • 编写set语句时,只使用一个=符号。
  • 当您说set %letter2%=c时,您没有将letter2的值设置为c,而是说“将的值设置为的值为c。”
  • =符号的两边删除空格; batch允许空格成为变量名的一部分,因此您创建了一个名为%letterr2 %的变量,并将其值设置为c
  • 您输错了,并将变量%字母 r 称为2%而不是%letter2%。

您不需要+进行字符串连接,只需将两个变量放在一起。

你的脚本将永远运行,因为%random%返回1到32768之间的数字。它低于10的几率微乎其微。它低于6的几率甚至更小。如果需要1到n之间的随机数,请使用代码set /a number=%random% %% n

最终,您的代码看起来像这样:

@echo off
set letter2=0
:1
set /a color=%random%%%10
set /a letter=%random%%%6

if %letter% == 0 goto A
if %letter% == 1 goto B
if %letter% == 2 goto C
if %letter% == 3 goto D
if %letter% == 4 goto E
if %letter% == 5 goto F

:a
set letter2=a
goto final
:b
set letter2=b
goto final
:c
set letter2=c
goto final
:d
set letter2=d
goto final
:e
set letter2=e
goto final
:f
set letter2=f
:final
set realcolor=%letter2%%color%
cls
color %realcolor%
echo hey this color is %color%
pause>nul
goto 1

答案 1 :(得分:3)

如果您想知道代码无效的原因,请参阅@SomethingDark的extensive explanation

但是,如果你想看到更简单的方法来做同样的事情,那么你可以查看这段代码:

@echo off
setlocal EnableDelayedExpansion

set letters=abcdef

:loop
set /A color=%random% %% 10
set /A letter=%random% %% 6

set letter2=!letters:~%letter%,1!

set realcolor=%letter2%%color%
cls
color %realcolor%
echo hey this color is %realcolor%
pause>nul
goto loop

此代码中的关键点是使用延迟扩展,因此我建议您在此网站中搜索此类术语,其中包含大量相关答案,例如this onethis one,或者this one,或this one,或......

答案 2 :(得分:1)

@echo off

:loop
    call :getRandom
    cls
    color %randomColor%
    echo This color is %randomColor%
    pause >nul
goto :loop

:getRandom
    set "randomColor="
    :getRandomLoop
        set /a "color=%random% %% 15"
        set "if=if %color%=="
        set "then=set color="
            %if%10 %then%A
            %if%11 %then%B
            %if%12 %then%C
            %if%13 %then%D
            %if%14 %then%E
            %if%15 %then%F
        set "randomColor=%randomColor%%color%"
        if "%randomColor:~1,1%"=="" goto :getRandomLoop
goto :EOF