Reputation:
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
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