1

Я реализую пакетную программу, которая выполняет разные вещи на разных этапах. Для каждого шага я хочу отобразить "дружественный" текстовый заголовок, например:

*************************************************************
*                      MY FIRST STEP                        *
*************************************************************

"МОЙ ПЕРВЫЙ ШАГ" - это переменная, которая может иметь различную длину.

Мой вопрос: у вас есть алгоритм или функция, которая может возвращать эту строку в качестве вывода с заголовком строки для отображения во входном параметре?

Заранее спасибо.

С уважением

2 ответа2

0

Вот пакетная строка, которая отображает параметры, заключенные в звездочки:

@echo off
setlocal enabledelayedexpansion
rem Set the message to issue as second line
set "msg=*         %*         *"
rem Calculate the length of the string
set Length=0
for /l %%A in (1,1,1000) do if "%msg%"=="!msg:~0,%%A!" (
  set /a Length=%%A
  goto :doit
)
:doit
rem Create a string of asterisks of same length
set header=
for /l %%i in (1,1,%Length%) do set "header=!header!*
rem Issue the message
echo %header%
echo %msg%
echo %header%

Вот как это выглядит при запуске:

образ

0

Ширина всех символов сильно зависит от используемого шрифта. Нет простого способа измерить ширину строки в пикселях, но иногда вам это не нужно.

По умолчанию в командной строке Windows используется Lucida Console, моноширинный шрифт, который упрощает работу. Примером будет:

@echo off
setLocal EnableDelayedExpansion
set "STR=Boom^!"
set "SIZE=50"

set "LEN=0"
:strLen_Loop
   if not "!!STR:~%LEN%!!"=="" set /A "LEN+=1" & goto :strLen_Loop

set "stars=****************************************************************************************************"
set "spaces=                                                                                                    "

call echo %%stars:~0,%SIZE%%%
set /a "pref_len=%SIZE%-%LEN%-2"
set /a "pref_len/=2"
set /a "suf_len=%SIZE%-%LEN%-2-%pref_len%"
call echo *%%spaces:~0,%pref_len%%%%%STR%%%%spaces:~0,%suf_len%%%*
call echo %%stars:~0,%SIZE%%%

endLocal

РАЗМЕР - это длина блока, который вы хотите вывести, убедитесь, что он достаточно большой, чтобы вместить все возможные строки внутри него.

Напомню, что это выведет симпатичный блок только в моноширинных шрифтах.

РЕДАКТИРОВАТЬ: Исправлена инициализация LEN.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .