web-dev-qa-db-ja.com

バッチ出力でテキストを中央揃えにする方法は?

さまざまなステップでさまざまなことを実行するバッチプログラムを実装しています。ステップごとに、次のような「わかりやすい」テキストヘッダーを表示します。

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

「MYFIRSTSTEP」は、さまざまな長さの変数です。

私の質問:入力パラメータに表示する文字列ヘッダーとともにこの文字列を出力として返すことができるアルゴリズムまたは関数はありますか?

前もって感謝します。

よろしく

3
NicoFC34

すべての記号の幅は、使用するフォントによって大きく異なります。文字列のピクセル幅を測定する簡単な方法はありませんが、必要ない場合もあります。

Windowsのコマンドラインはデフォルトで等幅フォントのLucidaConsoleを使用しているため、作業が簡単です。例は次のとおりです。

@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

ここでのSIZEは、出力するブロックの長さです。ブロック内のすべての可能な行に収まる大きさであることを確認してください。

これにより、かなりのブロックが出力されることを思い出してください等幅フォントのみ

編集:LENの初期化を修正しました。

1
IcedLance

アスタリスクで囲まれたパラメータを表示するバッチ文字列は次のとおりです。

@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%

実行すると次のようになります。

image

0
harrymc

簡単です:バッチで使用できます:echo ************************************************************* echo * MY FIRST STEP * echo *************************************************************

0
Gersom Rink