Accéder au répertoire précédent dans l'invite de commande Windows

39

Existe-t-il une commande / un outil permettant de parcourir le répertoire précédent dans l'invite de commande de Windows?

Sous Linux, utilisez habituellement

cd -

pour la navigation précédente dans le répertoire.

ukanth
la source

Réponses:

27

Enregistrez les éléments suivants dans, par exemple. mycd.batquelque part sur votre chemin:

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

Ensuite, pensez toujours à utiliser mycdau lieu de cdchanger de répertoire ou de lecteur.

Sinon, utilisez une doskeymacro:

C:\>doskey cd=mycd $*

Le seul inconvénient est que si vous omettez l'espace entre cdet ..ou \, vous obtiendrez la version intégrée de cdpas la doskeymacro ... et vous devez toujours vous rappeler de ne pas utiliser C:, D:etc. pour changer de lecteur.

Hugh Allen
la source
On dirait que ça ne devrait pas marcher, mais ça marche. OLDPWD est configuré correctement.
Hugh Allen
2
+1 C'est bien, ça marche! mais douloureux d'utiliser mycd (ou whtevr)
ukanth
@HughAllen peut créer une macro doskey pour cd \ et cd .. doskey cd \ = cd \ ou doskey cd \ = c: \ mycd.bat \ doskey C: = c: \ mycd.bat C:
barlop
Cette batte échouera pour c: \ blah.bat% USERPROFILE% (donc cd ou cdd% USERPROFILE% échouera). Pour résoudre ce problème, remplacez les guillemets simples par des guillemets doubles.
barlop
39

Vous pouvez utiliser pushd et popd:

C: \ WINDOWS> pushd \
C: \> popd
C: \ WINDOWS>
John T
la source
Thx John, Mais ce n'est pas exactement ce que je recherche.
ukanth
2
C'est exactement ce que je veux pour mes scripts batch, merci. Il change même les lecteurs sans avoir besoin du commutateur \ d
Deebster
2
Avertissement Avec pushd/popdvous devez considérer la possibilité d'erreurs . Dans un script quand vous avez pushdun répertoire qui n'existe pas, il ne finira pas dans la pile, mais quand vous popdquitterez d'un niveau: variable non remplie correctement, missprint, lecteur erroné ... Vous pensez être dans un répertoire différent de celui dans lequel vous vous trouvez, avec un problème sérieux, par exemple lorsque vous supprimez des fichiers / répertoires. Disaster (syntaxe Linux): cd $HOME; mkdir A; pushd A; mkdir B; pushd D; do stuff (in A, you believe in B); popd; rm -rf * vous croyez en A mais ... trop tard, tout votre répertoire personnel a disparu.
Hastur
4

si vous utilisez le fichier de commandes, vous pouvez utiliser

  cd /D  %~dp0

Cela vous ramènera au chemin d'origine à partir duquel le fichier de commandes a été exécuté.

ggonsalv
la source
4

Si vous voulez le comportement exact de bash, pourquoi ne pas utiliser bash? J'ai installé cygwin et c'est très agréable. Cela ne vous oblige pas à vous en tenir à ses outils UNIX - il appellera volontiers tous les exécutables Windows. Pour les commandes cmd.exeintégrées, vous pouvez créer un 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
la source
3

Il existe un cmdclone gratuit avec des fonctionnalités supplémentaires, notamment cd -appelé Take Command Console LE .

texte alternatif

Hugh Allen
la source
Cela ne marche pas
ukanth
2
@TiNS: OK je viens de l'essayer et cela a fonctionné pour moi. Qu'est-ce que cela a fait pour vous?
Hugh Allen
J'ai essayé avec console (de la fenêtre principale)
ukanth
1
@TiNS: Je ne comprends pas ce que vous avez fait, mais peut-être que cette capture d'écran vous aidera? (réponse mise à jour)
Hugh Allen
1

En fonction de votre objectif, vous pouvez simplement démarrer une nouvelle session cmd en faisant "cmd", déplacer un répertoire et faire ce que vous voulez. Lorsque vous quittez cette session, vous quittez la session et vous revenez dans le répertoire où vous étiez. vous avez commencé la nouvelle session.

utilisateur210211
la source
1

La réponse acceptée est très bonne pour l'exigence. Bien que je doive souvent basculer entre plusieurs annuaires récents au lieu de seulement deux (actuel et précédent).

J'ai donc récemment fabriqué un lot pour faciliter mes tâches quotidiennes. https://gist.github.com/programus/2d2738b2a746140186f7738b678bdcec

Programus
la source
C'est tellement facile de taper cdx :. Merci! Ce devrait être la réponse la plus votée.
AndreyWD
0

Ce que je fais c'est

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%
amphibient
la source