2016-05-21 7 views
-2

In der Batch-Sprache des Konsolenfensters CMD.EXE von Microsoft habe ich es nie gemocht, dass mein Befehl nach einer langen Anzeige des Verzeichnispfads ganz rechts beginnt. Also in meinem Control Panel →-System → Erweiterte Systemeinstellungen → Umgebungsvariablen Ich speicherte die folgende Zuordnung, wo $_ wie ein Soft-Return ist:Wie erreichen Sie eine zweizeilige Eingabeaufforderung?

PROMPT=[$P\]$_$+$G$S 

Die angezeigte Aufforderung war zwei Zeilen wie diese:

[C:\Temp\] 
>

(die $+ Spuren pushd und popd, die als ausgefallenere chdir Befehle. $S ist der Raum. Übrigens, die ^ Zeichen ein Zeilenumbruch/Fortsetzungszeichen in Batch, wie Backtick ` ist in PowerShell.)

Jetzt möchte ich die gleiche zwei Zeilenaufforderung in PowerShell. Es gibt gute Nachrichten und schlechte Nachrichten.

Die gute Nachricht ist, ich, indem Sie an der > prompt, dass in meinem offenen Powershell-Fenster erreichen können:

function prompt {'[' + $(get-location) + '\] SHIFTENTER > ' 

(von SHIFTENTER Ich drücke meine Shift- + Geben Sie, was ich denke, könnte sein, ein "Soft-Return" genannt?)

....... BAD NEWS, PROBLEM ......

ich mag den oben function prompt ... l setzen in meinem Profil PowerShell-Skript, nämlich Microsoft.PowerShell_profile.ps1 (bei Pfad $Profile). Aber wie?

Notepad.exe unterstützt nicht. Shift + Geben Sie ein.

MS Word versteht Umschalt + eingeben, aber wenn ich saveas .txt, und dann mit Notepad ++ untersuchen, sehe ich eine Ebene CR-LF (\ r \ n bedeutet, 0x0d 0x0A).

Notepad ++ Menü bearbeiten → Zeichentafel ermöglicht es mir besondere ASCII-Zeichen in meine .txt/PS1-Datei, wie 0x0b genannt VT (für „vertikalen Reiter“) einzufügen. Aber trotz einiger Behauptungen auf Websites verhält sich VT nicht wie eine weiche Rückgabe, wenn ich es in meiner function prompt ... Profil-.ps1-Datei verwende (ich führe auch das Profil .ps1-Skript aus, um es erneut zu testen).

Kann die Eingabeaufforderung, die ich möchte, von einem Profil .ps1-Skript erstellt werden?

+0

Also, wie funktioniert es genau dann nicht, wenn dein Profil CR-LF hat? – PetSerAl

+0

@PetSerAl, In meinen Tests wird ein einfacher Zeilenumbruch durch Drücken von Enter nicht in einen Zeilenumbruch in der Eingabeaufforderung übersetzt. Stattdessen sehe ich nun, dass [System.Environment] :: NewLine, die dem Eingabeaufforderungszeichenfolgenwert hinzugefügt wurde, das gesamte Problem löst. Vielen Dank. – MightyPen

+1

Wenn Sie selbst eine Lösung gefunden haben, schreiben Sie diese bitte als eigene Antwort. Bearbeiten Sie keine Lösung in Ihrer Frage. –

Antwort

0

Die Powershell-Äquivalent von Batch-Prompt ist:

function prompt { "[$(Get-Location)\]`r`n$("+"*(Get-Location -Stack).Count)>" } 

#`r`n is just a shorter way of writing [System.Environment]::NewLine 

es dem Profil hinzufügen Ihre Bedürfnisse passt:

AllUsersAllHosts:

C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ profile.ps1

AllUsersPowerShell:

C: \ Windows \ System32 \ Windows \ v1.0 \ Microsoft.PowerShell_profile.ps1

AllUsersISE:

C: \ Windows \ System32 \ Windows \ v1.0 \ Microsoft.PowerShellISE_profile.ps1

CurrentUserAllHosts:

C: \ Users \ Benutzername \ Docum Ents \ Windows \ profile.ps1

CurrentUserPowerShell:

C: \ Benutzer \ Benutzer \ Dokumente \ Windows \ Microsoft.PowerShell_profile.ps1

CurrentUserISE:

C: \ Benutzer \ Benutzername \ Dokumente \ WindowsPowerShell \ Microsoft.PowerShellISE_profile.ps1