Wie erhalte ich auf der Windows-Befehlszeile eine dynamische Eingabeaufforderung, in der angegeben wird, wo ich mich im Dateisystem befinde?

6

Ich versuche meine CMD zu ändern, um nur den aktuellen Verzeichnisnamen dynamisch anzuzeigen:

Desktop $

Als ich den Ordner wechselte, muss er aktualisiert werden.

Es ist nicht erforderlich, Code in einer reinen Batch-Datei zu sein. Dies kann von externen Befehlen, Cygwin Bash usw. abhängen.

@echo off
set a=bash -c "pwd | sed 's,^\(.*/\)\?\([^/]*\),\2,'"    
%a%
cmd 

Ausgänge

_test-et
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. Tüm hakları saklıdır.
>> 

Aber

>> prompt %a%

gibt

bash -c "pwd | sed 's,^\(.*/\)\?\([^/]*\),\2,'"
guneysus
quelle

Antworten:

1

Unter Verwendung von Microsoft PowerShell wird die Eingabeaufforderung von einer Funktion erstellt, die alles kann.

Eine Eingabeaufforderungsfunktion, die das tut, was Sie wollen, ist:

function prompt { (Split-Path -Leaf $pwd) + '$ ' }

Weitere Informationen finden Sie unter:

Konfigurieren Sie die Windows Powershell nur den aktuellen Ordnernamen in der Shell - Eingabeaufforderung angezeigt
Powershell über Prompts
Perfekte Eingabeaufforderung für Windows Powershell

Harrymc
quelle
Es ist Zeit, das CMD-Alter auszuschalten und zu PowerShell zu wechseln :) Danke. Schwierig, die Gewöhnung aufzugeben, aber es ist wahrscheinlicher, dass Cygwin cd ~auf PowerShell funktioniert, jedoch nicht in cmd.
Guneysus
4

Ich glaube, Sie können den promptBefehl verwenden.

PROMPT [text]

  text    Specifies a new command prompt.

Prompt can be made up of normal characters and the following special codes:

  $A   & (Ampersand)
  $B   | (pipe)
  $C   ( (Left parenthesis)
  $D   Current date
  $E   Escape code (ASCII code 27)
  $F   ) (Right parenthesis)
  $G   > (greater-than sign)
  $H   Backspace (erases previous character)
  $L   < (less-than sign)
  $N   Current drive
  $P   Current drive and path
  $Q   = (equal sign)
  $S     (space)
  $T   Current time
  $V   Windows version number
  $_   Carriage return and linefeed
  $$   $ (dollar sign)

If Command Extensions are enabled the PROMPT command supports
the following additional formatting characters:

  $+   zero or more plus sign (+) characters depending upon the
       depth of the PUSHD directory stack, one character for each
       level pushed.

  $M   Displays the remote name associated with the current drive
       letter or the empty string if current drive is not a network
       drive.

Beispiel:

setx PROMPT $P$S$$$S

Aktualisieren

Erstellen Sie eine Batchdatei mit dem folgenden Code und führen Sie sie aus.

@echo off

set root=%~p0
for %%F in ("%root%.") do set "ParentFolder=%%~nF"
setx PROMPT %ParentFolder%$S$F$S

Ergebnis ist:

Bildbeschreibung hier eingeben

stderr
quelle
Können Sie oben CURRENT DIRECTORYVariable sehen? Lass es uns testen. Öffnen Sie cmd und setzen Sie die Eingabeaufforderung auf: Diese set prompt=$B$C$D$E$F$G$H$L$N$P$Q$S$T$V$_$$ enthält alle Variablen außer $+ and $M. Aber ich kann immer noch nicht sehen, was dir aktuell ist, aber |(Pzt 04.11.2013←)<CC:\Users= 17:44:02,69Microsoft Windows [Version 6.3.9600] warum? Gibt es einen großen Fehler in cmd.exe?
Guneysus
@guneysus Ich habe meine Antwort aktualisiert. :-)
stderr
Danke , aber ich muss es nicht ändern, da aktuellen Ordner nicht dynamisch ist und mit setxihm ist system :) Es shoud werden setnicht setx Zusätzlich werde ich versuchen , ersetzen cdFunktion, es dynamisch zu aktualisieren.
Guneysus
2

Basierend auf dem Wikipedia-Eintrag für AUTOEXEC.BAT prompt $P$G macht man was man will. Dies ist ein Überbleibsel aus dem guten alten DOS. Gott weiß nur, warum so etwas seit den Anfängen von ... DOS3.3 oder so niemals zum Standard gemacht wurde.

Killermist
quelle
Dies ist nicht das, was OP will. Es gibt den vollständigen Pfad. OP möchte nur den letzten Teil des aktuellen Verzeichnisses (ohne den übergeordneten Pfad). Und es muss sich ändern, wenn das Verzeichnis geändert wird. Mit dem aktuellen promptBefehl ist dies nicht möglich . Zumindest nicht in cmd.exe.
Rik
0

Ich mag es, den vollständigen Kontext zu kennen, in dem ich mich in der Konsole befinde, aber je tiefer Sie sich in der Verzeichnisstruktur befinden, desto länger ist das "aktuelle Laufwerk und der aktuelle Pfad". Um also das Beste aus beiden Welten zu haben, habe ich das vollständige Laufwerk und den vollständigen Pfad gefolgt von einem CR und einem ">".

Das mache ich jetzt auf allen Windows-Rechnern, auf die ich Zugriff habe:

SETX PROMPT "%username%@%computername% $P$_$G"

Sie erhalten eine Eingabeaufforderung mit dem Benutzernamen, dem Hostnamen, dem vollständigen Pfad zum aktuellen Ordner und einer neuen Eingabezeile:

USERNAME@HOSTNAME C:\PATH\TO\CURRENT\FOLDER
>

SETX speichert die Variable (in diesem Fall "PROMPT") permanent (durch Neustarts, bis Sie sie ändern).

Skeetastax
quelle