Navegue al directorio anterior en el símbolo del sistema de Windows

39

¿Hay algún comando / herramienta para navegar por el directorio anterior en el símbolo del sistema de Windows?

En linux usualmente uso

cd -

para navegación de directorio anterior.

ukanth
fuente

Respuestas:

27

Guarde lo siguiente en, por ejemplo. mycd.baten algún lugar de tu camino:

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

Luego, recuerde siempre usar en mycdlugar de cdcambiar directorios y unidades.

Alternativamente, use una doskeymacro:

C:\>doskey cd=mycd $*

La única advertencia es que si omite el espacio entre cdy ..o \, obtendrá la versión incorporada de cdno la doskeymacro ... y aún debe recordar no usar C:, D:etc. para cambiar la unidad.

Hugh Allen
fuente
Parece que no debería funcionar, pero lo hace. OLDPWD se configura correctamente.
Hugh Allen
2
+1 ¡Esto es bueno, funciona! pero doloroso de usar mycd (o whtevr)
ukanth
@HughAllen puede hacer una macro doskey para cd \ y cd .. doskey cd \ = cd \ o doskey cd \ = c: \ mycd.bat \ doskey C: = c: \ mycd.bat C:
barlop
Ese bate fallará para c: \ blah.bat% USERPROFILE% (entonces cd o cdd% USERPROFILE% fallará). Para solucionarlo, cambie las comillas simples por comillas dobles.
barlop
39

Puedes usar pushd y popd:

C: \ WINDOWS> pushd \
C: \> popd
C: \ VENTANAS>
John T
fuente
Gracias John, pero esto no es exactamente lo que estoy buscando.
ukanth
2
Es exactamente lo que quiero para mis scripts por lotes, gracias. Incluso cambia las unidades sin necesidad del modificador \ d
Deebster
2
Advertencia Con pushd/popdusted debe considerar la posibilidad de errores . En una secuencia de comandos, cuando pushdun directorio que no existe no finalizará en la pila, pero cuando popdsalga de un nivel: variable no rellenada correctamente, error de impresión, unidad incorrecta ... Cree que está en un directorio diferente desde el que está, con un problema grave, por ejemplo, cuando elimina archivos / directorios. Desastre (sintaxis de Linux): cd $HOME; mkdir A; pushd A; mkdir B; pushd D; do stuff (in A, you believe in B); popd; rm -rf * cree en A pero ... demasiado tarde, todo su directorio de inicio se ha ido.
Hastur
4

si está ejecutando el archivo por lotes, puede usar

  cd /D  %~dp0

Esto volverá a la ruta original desde donde se ejecutó el archivo por lotes

ggonsalv
fuente
4

Si desea el comportamiento exacto de bash, ¿por qué no usar bash? Tengo instalado Cygwin y es muy agradable. No te hace apegarte a sus herramientas UNIX, felizmente llamará a cualquier Windows ejecutable. Para las cmd.execonstrucciones, puede crear 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
fuente
3

Hay un cmdclon de software gratuito con características adicionales que incluye la cd -llamada Take Command Console LE .

texto alternativo

Hugh Allen
fuente
Esto no funciona
2010
2
@TiNS: OK, acabo de probarlo y funcionó para mí. ¿Qué hizo por ti?
Hugh Allen
Lo intenté con la consola (desde la ventana principal)
2010
1
@TiNS: No tengo claro lo que hiciste, pero ¿tal vez esta captura de pantalla te ayudará? (respuesta actualizada)
Hugh Allen
1

Dependiendo de cuál sea su objetivo, puede comenzar una nueva sesión de cmd haciendo 'cmd', mover el directorio y hacer lo que quiera, cuando luego 'salga' para abandonar la sesión, volverá al directorio en el que estaba cuando comenzaste la nueva sesión.

usuario210211
fuente
1

La respuesta aceptada es muy buena para el requisito. Si bien a menudo tengo que cambiar entre muchos directorios recientes en lugar de solo dos (actual y anterior).

Así que recientemente hice un lote para facilitar mis trabajos diarios. https://gist.github.com/programus/2d2738b2a746140186f7738b678bdcec

Programus
fuente
Es muy fácil de escribir cdx :. ¡Gracias! Debería ser la respuesta más votada.
AndreyWD
0

Lo que hago es

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%
anfibio
fuente