Discussion forum for all Windows batch related topics.
Moderator: DosItHelp
-
G.SYLVAIN
- Posts: 6
- Joined: 30 Oct 2018 19:52
#1
Post
by G.SYLVAIN » 03 Nov 2018 20:07
I need to keep variable
%_DATE% fixed. Bot the variable user
%USERNAME% can be change in other computers.
Keep aligned text.
Code: Select all
...
::
:MENU
::
SETLOCAL ENABLEDELAYEDEXPANSION
CLS & COLOR 0F
MODE CON: COLS=84 LINES=37
TITLE === WINDOWS_MAINTENANCE_HELPER ===
::
CALL :FUNC_WINVER _WVER & REM FUNCTION TO DETERMINE WINDOWS VERSION
CALL :FUNC_DATE _DATE & REM SET DATE
CALL :FUNC_TIME _HOUR & REM SET TIME
:: SETUP VARIABLES
SET M=;C=
SET REV=REV. 3.2
::
ECHO [42mHI %USERNAME% ^^![0m DADE: [42m %_DATE% [0m
ECHO [42m%_WVER%[0m TIME: [42m %_HOUR% [0m
...
-
aGerman
- Expert
- Posts: 4678
- Joined: 22 Jan 2010 18:01
- Location: Germany
#2
Post
by aGerman » 04 Nov 2018 10:52
Sounds like you want to pad strings with spaces.
Code: Select all
@echo off &setlocal
set "spcs= "
set "s1=abc"
set "s2=abcde"
set "n1=123"
set "n2=12345"
:: pad right
REM conacatenate the string and the spaces
set "s=%s1%%spcs%"
REM output the first 20 characters
echo %s:~0,20%end
set "s=%s2%%spcs%"
echo %s:~0,20%end
echo(
:: pad left
REM conacatenate the spaces and the string
set "n=%spcs%%n1%"
REM output the last 20 characters
echo begin%n:~-20%
set "n=%spcs%%n2%"
echo begin%n:~-20%
pause
Steffen
-
G.SYLVAIN
- Posts: 6
- Joined: 30 Oct 2018 19:52
#3
Post
by G.SYLVAIN » 04 Nov 2018 13:59
I undestand you say, but your variable you have set at the top never change.
How to calculate lent or referance like "10" characters, if %username% it <10 add pad or >10 remove pad ?
Because the username is never same in other account
-
aGerman
- Expert
- Posts: 4678
- Joined: 22 Jan 2010 18:01
- Location: Germany
#4
Post
by aGerman » 04 Nov 2018 15:03
It doesn't matter if the values change or not. I tried to explain it by setting values with different lengths. As you can see the way how to manipulate the values is always the same regardless of their initial length. The only constant variable that you need is spcs that contains a number of spaces that will always suffice to pad the strings.
You'll certainly agree that %random% doesn't expand to values with constant length ...
Code: Select all
echo off &setlocal
set "spcs= "
:loop
set "rand=%random%"
set "a=%rand%%spcs%"
set "b=%spcs%%rand%"
echo %a:~0,10%#%b:~-10%
>nul timeout /t 1 /nobreak
goto loop
Steffen
-
G.SYLVAIN
- Posts: 6
- Joined: 30 Oct 2018 19:52
#5
Post
by G.SYLVAIN » 04 Nov 2018 16:35
you're right, but I do not know how to apply it. [0m, for ESC character for color in windows 10.
at botom the script. I have 2 variables %USERNAME% And %DATE% on same line.
I work whit
COLS=84
Code: Select all
::
:MENU
::
SETLOCAL ENABLEDELAYEDEXPANSION
CLS & COLOR 0F
MODE CON: COLS=84 LINES=37
TITLE === WINDOWS_MAINTENANCE_HELPER ===
::
CALL :FUNC_WINVER _WVER & REM FUNCTION TO DETERMINE WINDOWS VERSION
CALL :FUNC_DATE _DATE & REM SET DATE
CALL :FUNC_TIME _HOUR & REM SET TIME
:: SETUP VARIABLES
SET M=;C=
SET REV=REV. 3.2
:: TEXT ILINGMENT
SET "SPC= "
SET "UN=[42m HI %USERNAME% ^^![0m %SPC%
SET "DN=DADE: [42m %_DATE% [0m %SPC%
::
ECHO %UN:~0,42%%DN:~-42% & rem notwoking ?
ECHO [42m%_WVER%[0m TIME: [42m %_HOUR% [0m
-
aGerman
- Expert
- Posts: 4678
- Joined: 22 Jan 2010 18:01
- Location: Germany
#6
Post
by aGerman » 04 Nov 2018 18:43
There is no reason to manipulate the second half of the line in your case. But for the first half you need to consider the escape character is an additional character, the left bracket is an additional character, etc. for the string saved in UN.
Code: Select all
@echo off &setlocal EnableDelayedExpansion
for /f %%a in ('echo prompt $E^| cmd') do set "ESC=%%a"
set "spcs= "
set "UN=!ESC![42m HI %username% ^! !ESC![0m%spcs%"
echo !UN:~0,49!DATE: !ESC![42m %date% !ESC![0m
pause
Steffen
-
G.SYLVAIN
- Posts: 6
- Joined: 30 Oct 2018 19:52
#7
Post
by G.SYLVAIN » 04 Nov 2018 20:31
thank you very much, you solved my script !