Navegue para o diretório anterior no prompt de comando do Windows


38

Existe algum comando / ferramenta para navegar no diretório anterior no prompt de comando do Windows?

No linux geralmente use

cd -

para navegação anterior no diretório.

Respostas:


24

Salve o seguinte em, por exemplo. mycd.batem algum lugar no seu caminho:

@echo off
if '%*'=='' cd & exit /b
if '%*'=='-' (
    cd /d %OLDPWD%
    set OLDPWD=%cd%
) else (
    cd /d %*
    if not errorlevel 1 set OLDPWD=%cd%
)

Lembre-se sempre de usar em mycdvez de cdalterar diretórios e unidades.

Como alternativa, use uma doskeymacro:

C:\>doskey cd=mycd $*

A única ressalva é se você omitir o espaço entre cde ..ou \, você vai ter a versão embutida de cdnão o doskeymacro ... e você ainda tem que se lembrar de não usar C:, D:etc, para mudar de carro.


Parece que não deve funcionar, mas funciona. OLDPWD é definido corretamente.
Hugh Allen

11
+1 Isso é legal, funciona! mas doloroso para usar mycd (ou whtevr)
ukanth

@HughAllen pode criar uma macro doskey para cd \ e cd .. doskey cd \ = cd \ ou doskey cd \ = c: \ mycd.bat \ doskey C: = c: \ mycd.bat C:
barlop

Esse bastão falhará em c: \ blah.bat% USERPROFILE% (então o cd ou cdd% USERPROFILE% falhará). Para corrigir, altere aspas simples para aspas duplas.
barlop

37

Você pode usar pushd e popd:

C: \ WINDOWS> pushd \
C: \> popd
C: \ WINDOWS>

Thx John, Mas isso não é exatamente o que estou procurando.
ukanth

2
É exatamente o que eu quero para meus scripts em lote, obrigado. Ele ainda muda unidades sem precisar a opção \ d
Deebster

2
Aviso Com pushd/popdvocê tem que considerar a possibilidade de erros . Em um script, quando pushdum diretório que não existe, ele não termina na pilha, mas quando você popdsai de um nível: variável não preenchida corretamente, impressão incorreta, unidade errada ... Você acha que está em um diretório diferente daquele em que você está, com sérios problemas, por exemplo, quando você exclui arquivos / diretórios. Desastre (sintaxe do Linux): cd $HOME; mkdir A; pushd A; mkdir B; pushd D; do stuff (in A, you believe in B); popd; rm -rf * você acredita em A, mas ... tarde demais, todo o seu diretório pessoal se foi.
Hastur

4

se você estiver executando o arquivo em lotes, poderá usar

  cd /D  %~dp0

Isso retornará ao caminho original de onde o arquivo em lotes foi executado


4

Se você deseja o comportamento exato do bash, por que não usar o bash? Eu tenho o cygwin instalado e é muito bom. Isso não faz com que você se atenha às ferramentas UNIX - chamará qualquer executável de janelas. Para cmd.exebuiltins, você pode criar um alias:

hugh@comp07 ~/testdir                             
$ alias cm='cmd /c'                               

hugh@comp07 ~/testdir                             
$ cm dir                                          
 Volume in drive C has no label.                  
 Volume Serial Number is AC2A-8378                

 Directory of C:\cygwin\home\hugh\testdir         

18/05/2010  02:02 PM    <DIR>          .          
18/05/2010  02:02 PM    <DIR>          ..         
               0 File(s)              0 bytes     
               2 Dir(s)   1,365,155,840 bytes free

hugh@comp07 ~/testdir                             
$ 

3

Há um freeware cmdclone com recursos extras, incluindo cd -chamado Take Command Console LE .

texto alternativo


Isso não funciona
ukanth

2
@TiNS: OK, eu apenas tentei e funcionou para mim. O que isso fez por você?
Hugh Allen

Eu tentei com o console (a partir da janela principal)
ukanth

11
@ TiNS: Não sei ao certo o que você fez, mas talvez essa captura de tela ajude? (resposta atualizada)
Hugh Allen

1

Dependendo do seu objetivo, você pode simplesmente iniciar uma nova sessão de cmd executando 'cmd', mover o diretório e fazer o que quiser, quando fizer 'exit' para sair da sessão e voltar ao diretório em que estava. você iniciou a nova sessão.



0

O que eu faço é

rem capture the path of the initial dir
set RET_DIR=%CD%
rem do stuff...
rem and then return to the initial dir
cd %RET_DIR%
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.