シェルプロンプトに現在のフォルダー名のみを表示するようにWindows Powershellを構成します


37

Windows 7でPowershellを使用しています。シェルプロンプトで(フルパスではなく)現在のフォルダー名のみを表示するようにPowershellを構成する方法を教えてください。

たとえば、の代わりにがC:\folder\directory\name>必要ですname>

回答:


57

PowerShellプロファイル(%userprofile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1)でプロンプト関数をカスタマイズする必要があります。以前に変更したことがない場合は、空白であるか、存在しないことさえあります。

  1. プロファイルを開きます(たとえば、前述のファイルを開くか、PowerShellで実行しますNotepad $profile)。

  2. 次をプロファイルに追加します。

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  3. プロファイルを保存する

  4. PowerShellを再起動します

    オプション。スクリプトの実行が許可されていないというメッセージが表示された場合、PowerShellで次の行をコピーして貼り付ける必要があります。

    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
    

    そして再起動します。

Windows PowerShellの実行ポリシーにより、Windows PowerShellが構成ファイルを読み込んでスクリプトを実行する条件を決定できます。

ローカルコンピューター、現在のユーザー、または特定のセッションの実行ポリシーを設定できます。グループポリシー設定を使用して、コンピューターとユーザーの実行ポリシーを設定することもできます。

出典:Microsoftドキュメント


1
まったく正しくありません。[System.IO.Directory]::GetCurrentDirectory()は、Powershellの現在の場所ではなく、プロセスの作業ディレクトリを表します。これらは常に同じではありません。に置き換えますGet-Location
-zdan

+1ですが、ではなくget-locationを使用しますGetCurrentDirectory。PowerShellは必ずしもファイルシステムを意味するわけではないことに注意してください。レジストリスナップインを使用するcd hkcu:と、使用でき、プロンプトは完全にオフになります。
vcsjones

@Synetechそれはフォーマットのヘルプのかなり深いところ埋まっています:\
ボブ

1
$PWDを呼び出す代わりにを使用することもできますGet-Location。例:function prompt { (Split-Path -Leaf $pwd) + '> ' }
ジョーイ

1
promptプロファイルファイルで定義する必要はありません。グローバルセッションスコープ内になければなりません。デフォルトではと同等と思われるfunction prompt {"PS " + (Get-Location) + ">"}一方で、function prompt {""}同じ提供しますfunction prompt {"PS>"}function prompt {" `b"}空のプロンプトを取得するために使用します(少なくとも視覚的に...)。
masterxilo

5

追加のメモとして、最初に$ profileを作成するまで@Synetechのコマンドを実行できませんでした。

  1. PowerShellを開く
  2. 入力$profileしてEnter キーを押します。これにより、PowerShellが存在しないプロファイルパス(存在しない場合でも)が表示されます。私の道は@Synetechが上に投稿したものとは異なっていました。

    >$profile
    C:\Users\[username]\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
    
  3. WindowsPowerShellフォルダーとMicrosoft.PowerShell_profile.ps1ファイルの両方を作成する必要がありました。

  4. @Synetechのコードを追加して、PowerShellを再起動します。

注意:

posh-git(GitHubデスクトップを使用するときにインストールされます)を使用している場合、@ Synetechのスクリプトはposh-gitプロンプトをオーバーライドします。posh-gitの追加プロンプトスクリプトはこちら


1
それは同じだ。%userprofile%展開C:\Users\[username]
DavidPostill

@DavidPostillは私の理解でしたが、私のPowerShellは%userprofile%をディレクトリとして認識しませんでした。おそらくネットワーク設定が原因で、PowerShellがこれらのパスを認識するようにカスタマイズされているとは思わないのですか?
ブライアン

2
PowerShellの構文は異なります:$Env:userprofileと同等ですecho %userprofile%
DavidPostill

ISEと通常のプロンプトでは、$ profileの値が異なります。2つのファイルを作成する必要があります。
クリス

3

プロンプトを変更して、フルパスなしで最後に大なり記号なしで現在のフォルダーを表示します。

1つの方法は次のとおりです。

Function Prompt { "$( ( get-item $pwd ).Name )>" }

または:

Function Prompt { "$( Split-Path -leaf -path (Get-Location) )>" }

または:

Function Prompt { "$( ( Get-Location | Get-Item ).Name )>" }

1番目と3番目は、ネットワークフォルダーで機能するという点で、受け入れられている回答よりも優れています。Split-Pathは、などのパスでは正しく機能しません\\myserver\my\path
クリス

2

@Synetechの答えとPowerShellのプロファイルにある情報を組み合わせると、これは非常に簡単だとわかりました。私はPSの初心者だからです。私の手順(vscodeの場合):

  1. test-path $ profile(PSコマンドプロンプトで-プロファイルが設定されていますか?)
  2. new-item -path $ profile -itemtype file -force(上記に対する答えが偽であると仮定)
  3. notepad $ profile(メモ帳を開きます)
  4. 貼り付ける

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  5. 保存(場所を選択する必要はないはずです、既に行われています)
  6. リロードvscode-スクリプトの実行に関するメッセージが表示される可能性があります(またはリロード前に次のステップを実行するだけです)
  7. Set-ExecutionPolicy RemoteSigned -Scope CurrentUser(PSプロンプトで、SuperUse回答から)

  8. リロードvscode

そのため、ほとんどの場合@Synetechの回答(賛成)で簡単に始めることができます-特にステップ2でこれが非常に簡単になります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.