我试图制作一个改变颜色的程序,但它只是不起作用。 我按任意按钮,它不会改变,然后关闭。我不知道为什么会这样做
@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
答案 0 :(得分:5)
这里有几件事情。
最大的问题是set
到:a
中的:f
语句完全错误。
=
符号。set %letter2%=c
时,您没有将letter2的值设置为c,而是说“将的值设置为的值为c。”=
符号的两边删除空格; batch允许空格成为变量名的一部分,因此您创建了一个名为%letterr2 %
的变量,并将其值设置为c
。您不需要+
进行字符串连接,只需将两个变量放在一起。
你的脚本将永远运行,因为%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 one或this 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