有没有办法用变量或参数来改变批处理文件的颜色?

问题描述 投票:-1回答:1

我想用批处理文件做一个游戏。在游戏开始时,玩家可以设置命令提示窗口的颜色。我想把他们选择的颜色(一个2位数的十六进制代码)保存为一个参数或变量,并把它放到另一个保存颜色代码的文件中。我试着这样做(见下图),但似乎行不通。有谁有答案吗?

以下是我的代码(我是个编码新手,所以如果它看起来不好看,我很抱歉)。

批量文件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

除了这个,我还尝试用一个.txt文件的内容作为颜色值。

批量文件1:Batch File 1。

@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为例),但也没有用。

batch-file cmd colors
1个回答
0
投票

你似乎混淆了 命令行参数环境变量. 你不能设置参数引用,比如 %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

这并不是绝对的防备怪异的任意用户输入的故障安全,但也是一个好的起点。


0
投票

简答

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为例),但也没有用。

批量文件不支持十六进制代码。就这么简单。

© www.soinside.com 2019 - 2024. All rights reserved.