2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

◇Windowsのバッチファイルでエスケープシーケンスによる画面制御

Last updated at Posted at 2022-07-23

◇エスケープシーケンスによる画面制御

カラーコードなど制御文についてはマイクロソフトの「コンソール仮想端末シーケンス」をご覧ください。

・画面制御とカラー文字のサンプル

画面制御とカラー文字のサンプル
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

・可視光線のシミュレート

これは見たことないですね。
最後は白になるようにしていますがこんな感じのを表示します。
Visible light

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のバッチファイルのテクニックをご紹介します」にてご紹介させて頂いております。
お時間ありましたら覗いてみてください
お粗末様でした。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?