我想用批处理文件做一个游戏。在游戏开始时,玩家可以设置命令提示窗口的颜色。我想把他们选择的颜色(一个2位数的十六进制代码)保存为一个参数或变量,并把它放到另一个保存颜色代码的文件中。我试着这样做(见下图),但似乎行不通。有谁有答案吗?
以下是我的代码(我是个编码新手,所以如果它看起来不好看,我很抱歉)。
set colorvalue=F0
set %6=%colorvalue%
pause
exit
echo The color should change once you continue.
pause
color %6
pause
echo Did it work?
pause
exit
除了这个,我还尝试用一个.txt文件的内容作为颜色值。
@echo off
echo F0>value.txt
pause
exit
上面的代码应该让value.txt(和批处理文件在同一个位置)写成F0,这样就可以了。
批量文件2:上面的代码应该让value.txt(和批处理文件在同一个位置)写成F0,这样就可以了。
echo off
color value.txt
pause
exit
我想是我在 "color value. txt "处做错了什么 输出的只是颜色帮助信息。
COLOR [attr]
attr Specifies color attribute of console output
Color attributes are specified by TWO hex digits -- the first
corresponds to the background; the second the foreground. Each digit
can be any of the following values:
0 = Black 8 = Gray
1 = Blue 9 = Light Blue
2 = Green A = Light Green
3 = Aqua B = Light Aqua
4 = Red C = Light Red
5 = Purple D = Light Purple
6 = Yellow E = Light Yellow
7 = White F = Bright White
If no argument is given, this command restores the color to what it was
when CMD.EXE started. This value either comes from the current console
window, the /T command line switch or from the DefaultColor registry
value.
The COLOR command sets ERRORLEVEL to 1 if an attempt is made to execute
the COLOR command with a foreground and background color that are the
same.
Example: "COLOR fc" produces light red on bright white
我都试过了,但是颜色没有变化。我愿意尝试任何方法,任何帮助都会感激不尽! :D
P.S.我试过简单地将%6设置为十六进制代码(以F0为例),但也没有用。
你似乎混淆了 命令行参数 与 环境变量. 你不能设置参数引用,比如 %6
.
然而你可以这样做。
> "colour.txt" echo %COLOUR%
保存在变量中的值 %COLOUR%
到一个文件,并。
< "colour.txt" set /P COLOUR=""
来加载它。
这里是所有这些在一个脚本示例中的内容(请参考解释的 rem
注释在代码中)。)
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Define constants here:
set "_COLFILE=%~dpn0_colours.txt"
rem /* Attempt to read colour value from file; suppress error message when
rem file is not found; if an error occurs, prompt for colour value: */
(< "%_COLFILE%" set /P COLOUR="") 2> nul || call :COL_ASK
:COL_SET
rem // Ensure that colour value consists of exactly two characters:
set "COLOUR=00%COLOUR%"
set "COLOUR=%COLOUR:~,2%"
rem /* Try to convert hex colour value into an integer number; when it
rem fails, prompt for colour value (again): */
2> nul set /A "0x%COLOUR%" || (call :COL_ASK & goto :COL_SET)
rem /* Try to set specified colours; when foreground and background
rem colours are the same, prompt for colour value (again): */
color %COLOUR% || (call :COL_ASK & goto :COL_SET)
rem // Finally store colour value into file:
> "%_COLFILE%" echo/%COLOUR%
endlocal
exit /B
:COL_ASK
rem // Sub-routine that prompts for colour value:
echo What colours do you want to set?
rem // Display excerpt of help message of `color` command:
color /? | findstr /B /C:" "
rem // Clear variable to avoid keeping previous value upon empty input:
set "COLOUR="
rem // Actually prompt for colour value:
set /P COLOUR="Value: "
exit /B
这并不是绝对的防备怪异的任意用户输入的故障安全,但也是一个好的起点。
set colors=F0
color %colors%
批量文件1。
set colorvalue=F0
set %6=%colorvalue%
pause
exit
批量文件2:
echo The color should change once you continue.
pause
color %6
pause
echo Did it work?
pause
exit
%number
变量不能在批处理文件中定义,因为它们是保存传递到文件的参数的特殊变量。更多信息请看 如何向批处理文件传递参数?. %6
将是传递给批处理文件的第六个参数,除非你要传递6个参数到文件中,而你只用了1个,所以其余的参数是多余的。即使你可以这样定义变量,你也必须这样调用变量。
%%6%
这看起来并不像:
%6%
无论如何,你会用
set "6=F0"
批量文件1。
@echo off
echo F0>value.txt
pause
exit
批量文件2:
echo off
color value.txt
pause
exit
不是这样的 STDIN
作品。见 在批处理文件中读取stdin流. 要从文件中读取数据,你必须使用这样的for循环。
for %%a in (value.txt) do (set 6=%%a)
Where again, %6%
将被设置为文本文件中被读取的行。参见 for /?
cmd中的更多帮助。for
.
我试过简单地将%6设置为十六进制代码(以F0为例),但也没有用。
批量文件不支持十六进制代码。就这么简单。