Windowsのバッチファイルに複数の色を持たせるには?
2023-08-21 13:36:25
質問
Windows のバッチ ファイルで、同じ行に異なる色のテキストを表示することが可能かどうか、疑問に思っています。
echo hi world
私は"hi"を1色に、"world"を別の色にしたいのです。COLORコマンドを変数として設定すればいいのかもしれませんね。
set color1= color 2
set color9= color A
と共に、同じ行に配置します。
echo hi world
が、どうすればいいのかわからない。
どのように解決するのですか?
実はこれ、一時ファイルを作成しなくてもできるんです。 jeb と dbenham が説明した方法は、バックスペースを含まないターゲット ファイルでも動作します。重要な点は、findstr.exe によって認識される行が CRLF で終わってはいけないということです。 したがって、CRLFで終わらない行でスキャンする明らかなテキストファイルは、そのような行で終わらせることができれば、起動するバッチ自身である! この方法で動作する最新のサンプルスクリプトはこちら...
前の例からの変更点。
- 検索可能な文字列として、最終行のダッシュ 1 つを使用します。(短く、バッチ内の他のどこにもこのように表示されていない必要があります)。
- ルーチンと変数の名前を変更し、もう少しオブジェクト指向になるようにしました :-)
- パフォーマンスを少し改善するために、1 つのコール レベルを削除しました。
- コメントを追加しました (他の多くのスクリプト言語と同じように見えるように :# で始まります)。
@echo off
setlocal
call :Echo.Color.Init
goto main
:Echo.Color %1=Color %2=Str [%3=/n]
setlocal enableDelayedExpansion
set "str=%~2"
:Echo.Color.2
:# Replace path separators in the string, so that the final path still refers to the current path.
set "str=a%ECHO.DEL%!str:\=a%ECHO.DEL%\..\%ECHO.DEL%%ECHO.DEL%%ECHO.DEL%!"
set "str=!str:/=a%ECHO.DEL%/..\%ECHO.DEL%%ECHO.DEL%%ECHO.DEL%!"
set "str=!str:"=\"!"
:# Go to the script directory and search for the trailing -
pushd "%ECHO.DIR%"
findstr /p /r /a:%~1 "^^-" "!str!\..\!ECHO.FILE!" nul
popd
:# Remove the name of this script from the output. (Dependant on its length.)
for /l %%n in (1,1,12) do if not "!ECHO.FILE:~%%n!"=="" <nul set /p "=%ECHO.DEL%"
:# Remove the other unwanted characters "\..\: -"
<nul set /p "=%ECHO.DEL%%ECHO.DEL%%ECHO.DEL%%ECHO.DEL%%ECHO.DEL%%ECHO.DEL%%ECHO.DEL%"
:# Append the optional CRLF
if not "%~3"=="" echo.
endlocal & goto :eof
:Echo.Color.Var %1=Color %2=StrVar [%3=/n]
if not defined %~2 goto :eof
setlocal enableDelayedExpansion
set "str=!%~2!"
goto :Echo.Color.2
:Echo.Color.Init
set "ECHO.COLOR=call :Echo.Color"
set "ECHO.DIR=%~dp0"
set "ECHO.FILE=%~nx0"
set "ECHO.FULL=%ECHO.DIR%%ECHO.FILE%"
:# Use prompt to store a backspace into a variable. (Actually backspace+space+backspace)
for /F "tokens=1 delims=#" %%a in ('"prompt #$H# & echo on & for %%b in (1) do rem"') do set "ECHO.DEL=%%a"
goto :eof
:main
call :Echo.Color 0a "a"
call :Echo.Color 0b "b"
set "txt=^" & call :Echo.Color.Var 0c txt
call :Echo.Color 0d "<"
call :Echo.Color 0e ">"
call :Echo.Color 0f "&"
call :Echo.Color 1a "|"
call :Echo.Color 1b " "
call :Echo.Color 1c "%%%%"
call :Echo.Color 1d ^"""
call :Echo.Color 1e "*"
call :Echo.Color 1f "?"
:# call :Echo.Color 2a "!"
call :Echo.Color 2b "."
call :Echo.Color 2c ".."
call :Echo.Color 2d "/"
call :Echo.Color 2e "\"
call :Echo.Color 2f "q:" /n
echo(
set complex="c:\hello world!/.\..\\a//^<%%>&|!" /^^^<%%^>^&^|!\
call :Echo.Color.Var 74 complex /n
exit /b
:# The following line must be last and not end by a CRLF.
-
PS. 前の例ではなかった「!」文字の出力に問題があるようです。(少なくとも、同じ症状は出ませんでした。) 調査中です。
関連
-
[解決済み] Windowsにpipをインストールするにはどうしたらいいですか?
-
[解決済み] バッチファイルに引数を渡すにはどうしたらいいですか?
-
[解決済み] WindowsのCMDで1行に2つのコマンドを実行するにはどうしたらいいですか?
-
[解決済み] Windowsのバッチファイルから長いコマンドを複数行に分割する
-
[解決済み] 1つの.BATファイル内で複数の.BATファイルを実行する方法
-
[解決済み] バッチファイル内で改行をエコーする方法を教えてください。
-
[解決済み] N日以上前のファイルを削除するバッチファイル
-
[解決済み】WindowsでTCPまたはUDPポートをリッスンしているプロセスを見つけるにはどうすればよいですか?
-
[解決済み】バッチ/cmdで "コメントアウト"(コメント追加)するには?
-
[解決済み】Windowsのバッチファイル:.batと.cmdの違いは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Win10ショートカットキーBOOK(史上最強の完成度)
-
[解決済み] git が case の変更を無視するようにするには?
-
[解決済み] Windows XP以降のWindowsです。ウィンドウを表示せず、バックグラウンドでバッチファイルを実行するには?
-
[解決済み] Phonegap Cordovaのインストール Windows
-
[解決済み] Windowsで環境変数をエクスポート/インポートするには?
-
[解決済み] .bat "ファイルのコマンドラインパラメータを確認するには?
-
[解決済み] WindowsのCygwinでcrontabを実行するには?
-
[解決済み] サーバーに同じWindowsサービスの複数のインスタンスをインストールする
-
[解決済み] Windowsでアプリケーションにctrl-C(SIGINT)を送ることはできますか?
-
[解決済み] Windowsのコマンドプロンプトでパスワード認証付きsshを実行する