user6250760
user6250760

Reputation:

Color Command Does Not Execute In Batch File

I recently started making a new project. I would like to change the color by typing the color codes for BG and Text with set /p, but when I join the BG color variable and the text color variable, the cmd window closes.

Here's the code

:ColorText
CLS

SET /P "Input.User.SysConfigTextColor=Please enter the text Color:"

IF /I "%Input.User.SysConfigTextColor%" == "A" GOTO :ColorBG
IF /I "%Input.User.SysConfigTextColor%" == "B" GOTO :ColorBG
IF /I "%Input.User.SysConfigTextColor%" == "C" GOTO :ColorBG
IF /I "%Input.User.SysConfigTextColor%" == "D" GOTO :ColorBG
IF /I "%Input.User.SysConfigTextColor%" == "E" GOTO :ColorBG
IF /I "%Input.User.SysConfigTextColor%" == "F" GOTO :ColorBG
SET /A "Input.User.SysConfigTextColora=%Input.User.SysConfigTextColor%"
IF %Input.User.SysConfigTextColora% GTR -1 IF %Input.User.SysConfigTextColora% LSS 10 GOTO :ColorBG
GOTO :ColorText

:ColorBG
CLS
SET /P "Input.User.SysConfigBGColor=Please enter the background Color:"

IF /I "%Input.User.SysConfigBGColor%" == "A" GOTO :ColorD
IF /I "%Input.User.SysConfigBGColor%" == "B" GOTO :ColorD
IF /I "%Input.User.SysConfigBGColor%" == "C" GOTO :ColorD
IF /I "%Input.User.SysConfigBGColor%" == "D" GOTO :ColorD
IF /I "%Input.User.SysConfigBGColor%" == "E' GOTO :ColorD
IF /I "%Input.User.SysConfigBGColor%" == "F" GOTO :ColorD
SET /A "Input.User.SysConfigBGColora=%Input.User.SysConfigBGColor%"
IF %Input.User.SysConfigBGColora% GTR -1 IF %Input.User.SysConfigBGColora% LSS 10 GOTO :ColorD
GOTO :ColorBG

:ColorD
CLS
SET Var.System.Color=%Input.User.SysConfigBGColor%%Input.User.SysConfigTextColor%
ECHO %Input.User.SysConfigBGColor%%Input.User.SysConfigTextColor%>"%~Dp0C\Blah\Color.dat"

Please help me find out the problem, I'd appreciate any help.

Upvotes: 0

Views: 94

Answers (1)

Squashman
Squashman

Reputation: 14320

How about we simplify your logic a bit. Just so you know, making large variable names increases your environment size and slows down your batch file. Here is a better way to validate the user input.

 @echo off
 :ColorText
 CLS

 SET /P "TextColor=Please enter the text Color:"

 FOR %%G IN (0 1 2 3 4 5 6 7 8 9 A B C D E F) DO IF /I "%TextColor%"=="%%G" GOTO ColorBG
 GOTO ColorText

 :ColorBG
 cls
 SET /P "BGColor=Please enter the background Color:"

 FOR %%G IN (0 1 2 3 4 5 6 7 8 9 A B C D E F) DO IF /I "%BGColor%"=="%%G" GOTO ColorD
 GOTO ColorBG

 :ColorD

 SET Var.System.Color=%BGColor%%TextColor%
 ECHO %BGColor%%TextColor%
 pause

Upvotes: 3

Related Questions