cmd シェルでコマンドを入力した後に色をリセットすることは可能ですか?

cmd シェルでコマンドを入力した後に色をリセットすることは可能ですか?

私は Windows 10 を実行しており、同じマシン上の bash プロンプトと同じ外観になるように cmd.exe プロンプトを設定したいと考えています。 cmd.exe をロードするときに PROMPT 変数を設定する起動スクリプトを設定しました。これにより、シェルがルート権限で実行されているかどうかを検出し、それに応じて色を設定します。

シェルの色

しかし、スクリーンショットからわかるように、bash (下のウィンドウ) に示すように、コマンドの終了後に色がデフォルトにリセットされるように cmd.exe (上のウィンドウ) のプロンプトを設定することはできません。cmd から bash を実行しても、色はリセットできません。

次に、両方のシェルで色付きで ls を実行します。これを cmd で実行した場合、または cmd 内で bash を実行した場合、通常のファイルでは色をリセットできません。ただし、bash のみで実行した場合は、色をリセットできます。

lsカラー

cmd.exe の色の動作が bash シェルと同じになるように起動スクリプトを設定するにはどうすればよいですか?

答え1

Windows 10 コンソールには、*NIX に非常に似た新しい実験的な機能がいくつかあります。たとえば、これまで使用できた 16 色に制限されなくなった色や、カーソルの形状などです。

以前と同じように、プロパティ ウィンドウから構成されます。

ここに画像の説明を入力してください

詳細は以下をご覧ください:

https://devblogs.microsoft.com/commandline/new-experimental-console-features/

答え2

一つの選択肢としては、コンエミュ (カスタマイズconemu.xmlターミナルマネージャとして、Powershellのprofile.ps1

  • cmd特定のコマンドはPowershellで実行でき、コマンドの前にcmd /c

%UserProfile%\Documents\WindowsPowerShell\profile.ps1

#

            ##::[[--- PowerShell PS1 Profile ---]]::##

#================================================================

  # Parameters
#----------------------------------------------------------------

# ANSI:
  $ESC  = [char]27

# Host.PrivateData
  $PD   = $($Host.PrivateData)


  # Colors
#----------------------------------------------------------------

# Powershell
  $Host.UI.RawUI.BackgroundColor  = ($bckgrnd = 'Black')
  $Host.UI.RawUI.ForegroundColor  = 'Gray'

  $PD.ErrorForegroundColor        = 'Red'
  $PD.ErrorBackgroundColor        = $bckgrnd

  $PD.WarningForegroundColor      = 'Magenta'
  $PD.WarningBackgroundColor      = $bckgrnd

  $PD.DebugForegroundColor        = 'Yellow'
  $PD.DebugBackgroundColor        = $bckgrnd

  $PD.VerboseForegroundColor      = 'Green'
  $PD.VerboseBackgroundColor      = $bckgrnd

  $PD.ProgressForegroundColor     = 'Yellow'
  $PD.ProgressBackgroundColor     = $bckgrnd

  #Clear-Host


  # Prompt
#----------------------------------------------------------------

Function set-prompt {
  Param (
    [Parameter(Position=0)]
    [ValidateSet("Default","Test")]
    $Action
  )

  switch ($Action) {

    "Default" {
      Function global:prompt {
        if (test-path variable:/PSDebugContext) { '[DBG]: ' }
          write-host " "
          write-host ("$ESC[48;2;40;40;40m$ESC[38;2;170;210;0m$(Get-Location) $ESC[0m $ESC[0m")

        if ( $host.UI.RawUI.WindowTitle -match "Administrator" ) {
          $Host.UI.RawUI.ForegroundColor = 'Red'
          $(if ($nestedpromptlevel -ge 1) {
            write-host ('PS $$ ') -ForegroundColor Red -NoNewLine
          } else {
            write-host ('PS $ ') -ForegroundColor Red -NoNewLine
          })
        } else {
          $(if ($nestedpromptlevel -ge 1) {
            write-host ('PS $$ ') -ForegroundColor Blue -NoNewLine
          } else {
            write-host ('PS $ ') -ForegroundColor Blue -NoNewLine
          })
        }

        return " "
      }
    }


    "Test" {
      function prompt() {
        if ( Test-Wow64 ) {
          write-host -NoNewLine "Wow64 "
        }
        if ( Test-Admin ) {
          write-host -NoNewLine -f red "Admin "
        }
        write-host -NoNewLine -ForegroundColor Green $(get-location)
        foreach ( $entry in (get-location -stack)) {
          write-host -NoNewLine -ForegroundColor Red '+';
        }
        write-host -NoNewLine -ForegroundColor Green '>'
        ' '
      }
    }
  }
}

set-prompt Default
  • 色付きのテキストを表示しますプロンプトユーザーには赤字のプロンプト、管理者には赤字のプロンプト
  • プロファイルのオンザフライ切り替えが可能(リロード/切り替えプロンプト経由set-prompt <name>)
    • Default下のセクションをコピー/貼り付けして、それに応じて編集します(見るTest


マイクロソフトの新しいターミナル設定ファイルから高度にカスタマイズすることもできます.jsonが、ConEmu の方がカスタマイズしやすく、複数のシェルを実行できます。

関連情報