如何在批量输出中将文本居中?

Nic*_*C34 5 batch command-line batch-file

我正在实现一个批处理程序,该程序在不同的步骤中执行一些不同的事情。对于每个步骤,我想显示一个“友好”的文本标题,如下所示:

*************************************************************
*                      MY FIRST STEP                        *
*************************************************************
Run Code Online (Sandbox Code Playgroud)

“我的第一步”是一个可以有不同长度的变量。

我的问题:您是否有一种算法或函数可以返回该字符串作为输出,并在输入参数中显示字符串标题?

提前致谢。

问候

Ice*_*nce 2

所有符号的宽度很大程度上取决于所使用的字体。没有简单的方法来测量字符串的像素宽度,但有时您不需要它。

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
Run Code Online (Sandbox Code Playgroud)

这里的 SIZE 是你想要输出的块的长度,确保它足够大以容纳其中所有可能的行。

我要提醒的是,这只会以等宽字体输出一个漂亮的块。

编辑:修复了 LEN 初始化。