:: center.bat
@echo off
setlocal enabledelayedexpansion
set l=0
set m=0
set n=0
set t=%1
set t=%t:"=%
call :length "%t%" l
if %2 gtr %l% (
set /a m=%2-%l%
set /a n=!m!/2
:: パディング
for /l %%i in (1,1,!n!) do set t= !t!
for /l %%i in (1,1,!n!) do set t=!t!
set /a n=!m!%%2
if !n! equ 1 set t=!t!
)
if %l% gtr %2 (
set /a m=%l%-%2
set /a n=!m!/2
:: トリミング
for /l %%i in (1,1,!n!) do set t=!t:~1!
for /l %%i in (1,1,!n!) do set t=!t:~0,-1!
set /a n=!m!%%2
if !n! equ 1 set t=!t:~0,-1!
)
endlocal & echo [%t%]
goto :EOF
:length
setlocal
set i=0
set t=%1
set t=%t:"=%
:loop
set t=%t:~1%
set /a i+=1
if not "%t%" == "" goto loop
endlocal & set %2=%i%
goto :EOF
silverwire
#5681()
[
Batchfile
]
Rating0/0=0.00
バッチで書いてみました。文字列が半角空白を含まない場合は、引数をダブルクォーテー ションで括る必要はありません。なお、18行目と20行目の行末に半角空白が 1つあるので 注意してください。 e.g. C:\>@echo off & (for /l %i in (0,1,7) do center "abcde" %i) & @echo on [] [c] [bc] [bcd] [abcd] [abcde] [abcde ] [ abcde ] 遅延環境変数展開を利用しているので、Windows NTでは動作しません。Windows 2000, XP, 2003で動作を確認。:: center.bat @echo off setlocal enabledelayedexpansion set l=0 set m=0 set n=0 set t=%1 set t=%t:"=% call :length "%t%" l if %2 gtr %l% ( set /a m=%2-%l% set /a n=!m!/2 :: パディング for /l %%i in (1,1,!n!) do set t= !t! for /l %%i in (1,1,!n!) do set t=!t! set /a n=!m!%%2 if !n! equ 1 set t=!t! ) if %l% gtr %2 ( set /a m=%l%-%2 set /a n=!m!/2 :: トリミング for /l %%i in (1,1,!n!) do set t=!t:~1! for /l %%i in (1,1,!n!) do set t=!t:~0,-1! set /a n=!m!%%2 if !n! equ 1 set t=!t:~0,-1! ) endlocal & echo [%t%] goto :EOF :length setlocal set i=0 set t=%1 set t=%t:"=% :loop set t=%t:~1% set /a i+=1 if not "%t%" == "" goto loop endlocal & set %2=%i% goto :EOFRating0/0=0.00-0+
[ reply ]