Na linha de comando do Windows, como obtenho um prompt dinâmico que me diz onde estou no sistema de arquivos?


6

Estou tentando modificar meu CMD, para mostrar apenas o nome atual do diretório dinamicamente como:

Desktop $

Quando troquei a pasta, ela deve ser atualizada.

Não é necessário que o código seja um arquivo puramente em lote, pois pode depender de comandos externos, cygwin bash, etc.

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

saídas

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

Mas

>> prompt %a%

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

Respostas:


1

Usando o PowerShell da Microsoft, o prompt é produzido por uma função que pode fazer qualquer coisa.

Uma função de prompt que faz o que você deseja é:

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

Para mais informações, veja :

Configure o Windows Powershell para exibir apenas o nome da pasta atual no prompt do shell
Powershell sobre Prompts
Perfect Prompt para Windows PowerShell


É hora de desativar a idade do CMD e mudar para o PowerShell :) Obrigado. Difícil desistir da habituação, mas é mais provável que o cygwin cd ~funcione no PowerShell, mas não no cmd.
guneysus

4

Eu acredito que você pode usar o promptcomando

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.

Exemplo:

setx PROMPT $P$S$$$S

Atualizar

Crie um arquivo em lotes contendo o código abaixo e execute.

@echo off

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

O resultado é:

insira a descrição da imagem aqui


Você pode ver a CURRENT DIRECTORYvariável acima ? Vamos testar. Abra o cmd e defina prompt como: set prompt=$B$C$D$E$F$G$H$L$N$P$Q$S$T$V$_$$ que contém todas as variáveis, exceto $+ and $M. Mas ainda não consigo ver ainda dir atual, mas dê |(Pzt 04.11.2013←)<CC:\Users= 17:44:02,69Microsoft Windows [Version 6.3.9600] Por que? Existe um erro enorme no cmd.exe?
guneysus

@guneysus Atualizei minha resposta. :-)
stderr

Obrigado, mas eu preciso mudá-lo, porque pasta atual não é dinâmico e com setxisso é systemwide :) É deviam ser setnão setx Além disso vou tentar substituir cdfunção, para atualizá-lo dinamicamente.
guneysus

2

Com base na entrada da wikipedia do AUTOEXEC.BAT, prompt $P$G você fará o que quiser. Esta é uma ressaca do bom e velho DOS. Só Deus sabe por que algo assim nunca se tornou padrão desde os primeiros dias do ... DOS3.3 ou mais.


Não é isso que o OP quer. Dá o caminho completo. O OP deseja apenas a última parte do diretório atual (sem o caminho pai). E precisa mudar ao alterar o diretório. Não é possível com o promptcomando atual . Pelo menos não dentro cmd.exe.
Rik

0

Eu gosto de conhecer o contexto completo de onde estou no console, mas quanto mais fundo você desce na árvore de diretórios, mais longa é a "Unidade e caminho atuais". Para ter o melhor dos dois mundos, tenho a unidade e o caminho completos seguido por um CR e depois por um ">".

Agora é isso que faço em todas as máquinas Windows às quais tenho acesso:

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

O que fornece um prompt mostrando o nome de usuário, o nome do host, o caminho completo para a pasta atual e uma nova linha para digitar:

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

O SETX armazena a variável (neste caso, "PROMPT") permanentemente (por meio de reinicializações, até você alterá-la).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.