【发布时间】:2023-02-10 21:42:31
【问题描述】:
我只想改变背景的颜色,只改变前景。因此,如果我先更改背景颜色,然后更改前景颜色,我不希望在更改前景色时重置背景颜色,反之亦然。
如果我键入例如颜色 5,我可以让它为前景工作,但我不知道只更改背景。
【问题讨论】:
标签: batch-file
我只想改变背景的颜色,只改变前景。因此,如果我先更改背景颜色,然后更改前景颜色,我不希望在更改前景色时重置背景颜色,反之亦然。
如果我键入例如颜色 5,我可以让它为前景工作,但我不知道只更改背景。
【问题讨论】:
标签: batch-file
您可以使用color <backgroundcolor><foregroundcolor> 更改两者。
您不能只更改一个而不重置另一个。因此,我会将这些值保存在变量中。
像这样:
@echo off
echo FOREGROUND
set bg=0
set fg=f
:Loop
set bg=0
set fg=f
color %bg%%fg%
ping localhost -n 2 >nul
set fg=a
color %bg%%fg%
ping localhost -n 2 >nul
set bg=5
color %bg%%fg%
ping localhost -n 2 >nul
set fg=9
color %bg%%fg%
ping localhost -n 2 >nul
set bg=2
color %bg%%fg%
ping localhost -n 2 >nul
goto :Loop
如果你想要更复杂的东西,你可以这样做:
@echo off
:: CHECK IF YOU ARE CALLING THE .BAT WITH ARGUMENTS
if not "%~1"=="" goto %~1
:: IF NOT IT IS THE MAIN
set bg=0
set fg=f
:: CREATE YOUR OWN "FUNCTION" THAT CALLS THE OWN .BAT WITH ARGUMENTS
set clr=call %cd%%~nx0 color
echo color %bg%%fg%
:: DEMONSTRATION ON HOW TO USE
:Loop
::CHANGE BACK- AND FOREGROUND COLOR
%clr% f a
echo color %bg%%fg%
ping localhost -n 2 >nul
::CHANGE FOREGROUND COLOR
%clr% - 4
echo color %bg%%fg%
ping localhost -n 2 >nul
::CHANGE BACKGROUND COLOR
%clr% 9 -
echo color %bg%%fg%
ping localhost -n 2 >nul
goto :Loop
::SET THE BACK- AND FOREGROUND
:color
if not "%~2"=="-" set bg=%~2
if not "%~3"=="-" set fg=%~3
color %bg%%fg%
命令看起来像:
Change both: %clr% f a
Foreground : %clr% - 4
Background : %clr% 9 -
【讨论】: