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.

ukanth
fonte

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.

Hugh Allen
fonte
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>
John T
fonte
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

ggonsalv
fonte
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                             
$ 
Hugh Allen
fonte
3

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

texto alternativo

Hugh Allen
fonte
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.

user210211
fonte
1

A resposta aceita é muito boa para o requisito. Embora muitas vezes precise alternar entre muitos diretórios recentes, em vez de apenas dois (atual e anterior).

Recentemente, fiz um lote para facilitar meus trabalhos diários. https://gist.github.com/programus/2d2738b2a746140186f7738b678bdcec

Programus
fonte
É tão fácil de digitar cdx :. Obrigado! Deve ser a resposta mais votada.
precisa saber é o seguinte
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%
anfíbio
fonte