5

Я пытаюсь изменить CMD, чтобы динамически показывать только текущее имя каталога, например:

Desktop $

Когда я переключил папку, она должна быть обновлена.

Это не обязательно должен быть код в чисто командном файле, это может зависеть от любых внешних команд, Cygwin Bash и т.д.

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

выходы

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

Но

>> prompt %a%

дает

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

4 ответа4

4

Я считаю, что вы можете использовать команду prompt .

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.

Пример:

setx PROMPT $P$S$$$S

Обновить

Создайте пакетный файл, содержащий приведенный ниже код, и запустите.

@echo off

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

Результат:

2

На основании записи в Википедии для приглашения AUTOEXEC.BAT prompt $P$G будет делать то, что вы хотите. Это пережиток старого доброго DOS. Только Бог знает, почему что-то подобное никогда не делалось дефолтом с первых дней ... DOS3.3 или около того.

1

С помощью Microsoft PowerShell приглашение создается функцией, которая может делать что угодно.

Функция подсказки, которая делает то, что вы хотите:

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

Для получения дополнительной информации см .:

Настройте Windows Powershell для отображения только текущего имени папки в приглашении оболочки
Powershell о подсказках
Идеальная подсказка для Windows PowerShell

0

Мне нравится знать полный контекст того, где я нахожусь в консоли, но чем глубже вы идете по дереву каталогов, тем длиннее "Текущий диск и путь", поэтому, чтобы получить лучшее из обоих миров, у меня есть полный диск и путь сопровождаемый CR тогда ">".

Это то, что я сейчас делаю на всех машинах Windows, к которым я получаю доступ:

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

Что дает вам подсказку, показывающую имя пользователя, имя хоста, полный путь к текущей папке и совершенно новую строку для ввода:

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

SETX хранит переменную (в данном случае "PROMPT") постоянно (через перезагрузку, пока вы не измените ее).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .