雪国の技術的な夏

プログラミング的な話や特定のツール設定の話など。 ※ただし変態に限る。

バッチでの簡易色変更関数

※実施は自己責任でお願いします。


[動作確認済みの環境]
Windows7 Professional


[ソース]

・色変更サンプル.bat

@echo off
setlocal


call :echoc "c" "改行なし版"
call :echocln "9" "改行あり版"

pause
exit /b 0

rem :::::::::::::::::::::::::::::::::::::::::::::
rem :: 色変更(改行なし)
rem :: ※色番号に関してはbatヘルプ参照「help color」
rem :: ※表示テキストがファイル名となる都合上、半角「\/:*?"<>|」が出力できないため無理矢理変換を書ける
rem :: 
rem :: [引数]
rem ::   %1 : 色番号
rem ::   %2 : テキスト
rem :::::::::::::::::::::::::::::::::::::::::::::
:echoc
set TmpDir=%TEMP%\__echoc__
set DumpTxt=%~2
set DumpTxt=%DumpTxt:\=¥%
set DumpTxt=%DumpTxt:/=/%
set DumpTxt=%DumpTxt::=:%
set DumpTxt=%DumpTxt:<=<%
set DumpTxt=%DumpTxt:>=>%
set DumpTxt=%DumpTxt:|=|%
set DumpTxt=%DumpTxt:?=?%
set DumpTxt=%DumpTxt:"=”%
rem "←エディタ色表示用
rem 「*」置換は諦める
if exist "%TmpDir%\" rd /s /q "%TmpDir%"
md "%TmpDir%"
pushd "%TmpDir%"
<nul >"%DumpTxt%" cmd /k prompt $h
findstr /a:%~1 "." "%DumpTxt%" nul
popd
rd /s /q "%TmpDir%"
goto :EOF

rem :::::::::::::::::::::::::::::::::::::::::::::
rem :: 色変更(改行あり)
rem :: ※色番号に関してはbatヘルプ参照「help color」
rem :: ※表示テキストがファイル名となる都合上、半角「\/:*?"<>|」が出力できないため無理矢理変換を書ける
rem :: 
rem :: [引数]
rem ::   %1 : 色番号
rem ::   %2 : テキスト
rem :::::::::::::::::::::::::::::::::::::::::::::
:echocln
set TmpDir=%TEMP%\__echocln__
set DumpTxt=%~2
set DumpTxt=%DumpTxt:\=¥%
set DumpTxt=%DumpTxt:/=/%
set DumpTxt=%DumpTxt::=:%
set DumpTxt=%DumpTxt:<=<%
set DumpTxt=%DumpTxt:>=>%
set DumpTxt=%DumpTxt:|=|%
set DumpTxt=%DumpTxt:?=?%
set DumpTxt=%DumpTxt:"=”%
rem "←エディタ色表示用
rem 「*」置換は諦める
if exist "%TmpDir%\" rd /s /q "%TmpDir%"
md "%TmpDir%"
pushd "%TmpDir%"
<nul >"%DumpTxt%" cmd /k prompt $h
findstr /a:%~1 "." "%DumpTxt%" nul
popd
rd /s /q "%TmpDir%"
echo.
goto :EOF

[その他]
・仕様上、tempフォルダを使用して色用のファイルを作成→削除を繰り返しているため、
 HDD的にはよろしくない設計と思われる。
はてな記法が引数を識別してくれてないようなので色がおかしいが気にしない。

[備考]
ファイル関数化?したいなら単純に名前部分を切り抜いてファイル作成すれば行けると思います。