◇エスケープシーケンスによる画面制御
カラーコードなど制御文についてはマイクロソフトの「コンソール仮想端末シーケンス」をご覧ください。
・画面制御とカラー文字のサンプル
画面制御とカラー文字のサンプル
Esc.bat
@echo off
:: 遅延展開 バグの原因になる場合があるので注意;
setlocal enabledelayedexpansion
:: %ESC%でエスケープシーケンスを利用できるようにする;
for /f "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (set ESC=%%b)
echo.
echo 画面制御
echo 文字列 説明 備考
echo %%ESC%%[0J カーソル位置から画面右下まで消去
echo %%ESC%%[1J 画面左上からカーソル位置まで消去
echo %%ESC%%[2J 画面クリア
echo %%ESC%%[0K カーソル位置から右側消去 同一行
echo %%ESC%%[1K カーソル位置から左側消去 同一行
echo %%ESC%%[2K カーソルのある1行の消去
echo %%ESC%%[nA カーソルをn行上へ移動
echo %%ESC%%[nB カーソルをn行下へ移動
echo %%ESC%%[nC カーソルをn桁右へ移動 右端で停止
echo %%ESC%%[nD カーソルをn桁左へ移動 左端で停止
echo %%ESC%%[r;cH カーソルをr行、n桁目へ移動 もしくは%%ESC%%[r;nf
echo ------------------------------------
echo.
echo.
echo.
echo これはテストです。この行が書き変わります。
pause
echo %ESC%[2A%ESC%[2K
echo %ESC%[1A%ESC%[2K
echo %ESC%[2A
echo 書き換えられたでしょうか
pause
echo.
echo %ESC%[41;97mエスケープシーケンスによるカラー出力テスト%ESC%[0m
echo.
echo https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences
echo.
echo %%ESC%%[101;93m%ESC%[101;93m STYLES %ESC%[0m
echo %%ESC%%[0m %ESC%[0mReset%ESC%[0m
echo %%ESC%%[1m %ESC%[1mBold%ESC%[0m
echo %%ESC%%[4m %ESC%[4mUnderline%ESC%[0m
echo %%ESC%%[7m %ESC%[7mInverse%ESC%[0m
echo.
echo %%ESC%%[42;93m%ESC%[42;93m NORMAL FOREGROUND COLORS %ESC%[0m
echo %%ESC%%[30m %ESC%[30mBlack%ESC%[0m (black)
echo %%ESC%%[31m %ESC%[31mRed%ESC%[0m
echo %%ESC%%[32m %ESC%[32mGreen%ESC%[0m
echo %%ESC%%[33m %ESC%[33mYellow%ESC%[0m
echo %%ESC%%[34m %ESC%[34mBlue%ESC%[0m
echo %%ESC%%[35m %ESC%[35mMagenta%ESC%[0m
echo %%ESC%%[36m %ESC%[36mCyan%ESC%[0m
echo %%ESC%%[37m %ESC%[37mWhite%ESC%[0m
echo.
echo %%ESC%%[43;30m%ESC%[43;30m NORMAL BACKGROUND COLORS %ESC%[0m
echo %%ESC%%[40m %ESC%[40mBlack%ESC%[0m
echo %%ESC%%[41m %ESC%[41mRed%ESC%[0m
echo %%ESC%%[42m %ESC%[42mGreen%ESC%[0m
echo %%ESC%%[43m %ESC%[43mYellow%ESC%[0m
echo %%ESC%%[44m %ESC%[44mBlue%ESC%[0m
echo %%ESC%%[45m %ESC%[45mMagenta%ESC%[0m
echo %%ESC%%[46m %ESC%[46mCyan%ESC%[0m
echo %%ESC%%[47m %ESC%[47mWhite%ESC%[0m (white)
echo.
echo %%ESC%%[47;30m%ESC%[47;30m STRONG FOREGROUND COLORS %ESC%[0m
echo %%ESC%%[90m %ESC%[90mWhite%ESC%[0m
echo %%ESC%%[91m %ESC%[91mRed%ESC%[0m
echo %%ESC%%[92m %ESC%[92mGreen%ESC%[0m
echo %%ESC%%[93m %ESC%[93mYellow%ESC%[0m
echo %%ESC%%[94m %ESC%[94mBlue%ESC%[0m
echo %%ESC%%[95m %ESC%[95mMagenta%ESC%[0m
echo %%ESC%%[96m %ESC%[96mCyan%ESC%[0m
echo %%ESC%%[97m %ESC%[97mWhite%ESC%[0m
echo.
echo %%ESC%%[41;97m%ESC%[41;97m STRONG BACKGROUND COLORS %ESC%[0m
echo %%ESC%%[100m %ESC%[100mBlack%ESC%[0m
echo %%ESC%%[101m %ESC%[101mRed%ESC%[0m
echo %%ESC%%[102m %ESC%[102mGreen%ESC%[0m
echo %%ESC%%[103m %ESC%[103mYellow%ESC%[0m
echo %%ESC%%[104m %ESC%[104mBlue%ESC%[0m
echo %%ESC%%[105m %ESC%[105mMagenta%ESC%[0m
echo %%ESC%%[106m %ESC%[106mCyan%ESC%[0m
echo %%ESC%%[107m %ESC%[107mWhite%ESC%[0m
echo.
echo %%ESC%%[101;93m%ESC%[101;93m COMBINATIONS %ESC%[0m
echo %%ESC%%[31m %ESC%[31mred foreground color%ESC%[0m
echo %%ESC%%[7m %ESC%[7minverse foreground ^<-^> background%ESC%[0m
echo %%ESC%%[7;31m %ESC%[7;31minverse red foreground color%ESC%[0m
echo %%ESC%%[7m and nested %%ESC%%[31m %ESC%[7mbefore %ESC%[31mnested%ESC%[0m
echo %%ESC%%[31m and nested %%ESC%%[7m %ESC%[31mbefore %ESC%[7mnested%ESC%[0m
echo.
:: 終了処理(エクスプローラーから起動されていた場合はPauseする);
:EndProcess
echo %cmdcmdline% | find /i "%~f0">NUL
if %ERRORLEVEL% equ 0 (cmd /k)
goto :eof
・可視光線のシミュレート
これは見たことないですね。
最後は白になるようにしていますがこんな感じのを表示します。
R.B.G. カラーグラデーションのサンプル
RGB.bat
@echo off
:: 遅延展開 バグの原因になる場合があるので注意;
setlocal enabledelayedexpansion
:: %ESC%でエスケープシーケンスを利用できるようにする;
for /f "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (set ESC=%%b)
set MinValue=0
set MaxValue=255
set ChgValue=0
set Shape=■
echo.
echo R.G.B. Pattern
set R=%MinValue%
set G=%MinValue%
set B=%MinValue%
set RGBBox=
set RGBBox=%ESC%[38;2;%R%;%G%;%B%m%Shape%
set R=%MaxValue%
set RGBBox=%RGBBOX%%ESC%[38;2;%R%;%G%;%B%m%Shape%
set G=%MaxValue%
set RGBBox=%RGBBOX%%ESC%[38;2;%R%;%G%;%B%m%Shape%
set R=%MinValue%
set RGBBox=%RGBBOX%%ESC%[38;2;%R%;%G%;%B%m%Shape%
set B=%MaxValue%
set RGBBox=%RGBBOX%%ESC%[38;2;%R%;%G%;%B%m%Shape%
set G=%MinValue%
set RGBBox=%RGBBOX%%ESC%[38;2;%R%;%G%;%B%m%Shape%
set R=%MaxValue%
set RGBBox=%RGBBOX%%ESC%[38;2;%R%;%G%;%B%m%Shape%
set G=%MaxValue%
set RGBBox=%RGBBOX%%ESC%[38;2;%R%;%G%;%B%m%Shape%
echo %RGBBOX%%ESC%[0m
echo.
echo Mono Color Pattern / R.G.B. Gradations
set ChgValue=8
set RGBBox=
for /l %%m in (%MinValue%, %ChgValue%, %MaxValue%) do (
set RGBBox=!RGBBox!%ESC%[38;2;%%m;%%m;%%mm%Shape%
)
echo %RGBBOX%%ESC%[0m
echo.
echo Spectrum Pattern / R.G.B. Gradations
set R=%MinValue%
set G=%MinValue%
set B=%MinValue%
set ChgValue=32
set RGBBox=
:: Blue Min to Max;
for /l %%b in (%MinValue%, %ChgValue%, %MaxValue%) do (
set RGBBox=!RGBBox!%ESC%[38;2;%R%;%G%;%%bm%Shape%
)
set B=%MaxValue%
:: Green Min to Max;
for /l %%g in (%MinValue%, %ChgValue%, %MaxValue%) do (
set RGBBox=!RGBBox!%ESC%[38;2;%R%;%%g;%B%m%Shape%
)
set G=%MaxValue%
:: Blue Max to Min;
for /l %%b in (%MaxValue%, -%ChgValue%, %MinValue%) do (
set RGBBox=!RGBBox!%ESC%[38;2;%R%;%G%;%%bm%Shape%
)
set B=%MinValue%
:: Red Min to Max;
for /l %%r in (%MinValue%, %ChgValue%, %MaxValue%) do (
set RGBBox=!RGBBox!%ESC%[38;2;%%r;%G%;%B%m%Shape%
)
set R=%MaxValue%
:: Green Max to Min;
for /l %%g in (%MaxValue%, -%ChgValue%, %MinValue%) do (
set RGBBox=!RGBBox!%ESC%[38;2;%R%;%%g;%B%m%Shape%
)
set G=%MinValue%
:: Blue Min to Max;
for /l %%b in (%MinValue%, %ChgValue%, %MaxValue%) do (
set RGBBox=!RGBBox!%ESC%[38;2;%R%;%G%;%%bm%Shape%
)
set B=%MaxValue%
:: Green Min to Max;
for /l %%g in (%MinValue%, %ChgValue%, %MaxValue%) do (
set RGBBox=!RGBBox!%ESC%[38;2;%R%;%%g;%B%m%Shape%
)
set G=%MaxValue%
set RGBBox=%RGBBox%%ESC%[38;2;%R%;%G%;%B%m%Shape%
echo %RGBBOX%%ESC%[0m
echo.
:: 終了処理(エクスプローラーから起動されていた場合はPauseする);
:EndProcess
echo %cmdcmdline%|find /i "%~f0">NUL
if %ERRORLEVEL% equ 0 (cmd /k)
goto :eof
おわりに
他にも「⧉Windowsのバッチファイルのテクニックをご紹介します」にてご紹介させて頂いております。
お時間ありましたら覗いてみてください
お粗末様でした。