Перейдите к предыдущему каталогу в командной строке Windows


39

Есть ли команда / инструмент для навигации по предыдущему каталогу в командной строке Windows?

В Linux обычно используют

cd -

для предыдущей навигации по каталогу.

Ответы:


27

Сохраните следующее, например. mycd.batгде-то на вашем пути:

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

Тогда всегда не забывайте использовать mycdвместо cdсмены каталогов и дисков.

В качестве альтернативы используйте doskeyмакрос:

C:\>doskey cd=mycd $*

Единственное предостережение: если вы пропустите пробел между cdи ..или \, вы получите встроенную версию cdне doskeyмакроса ... и вам все равно придется помнить, что не следует использовать C:и D:т. Д. Для смены диска.


Похоже, это не должно работать, но это работает. OLDPWD устанавливается правильно.
Хью Аллен

2
+1 Это хорошо, это работает! но больно использовать mycd (или whtevr)
укант

@HughAllen может сделать макрос doskey для cd \ и cd .. doskey cd \ = cd \ или doskey cd \ = c: \ mycd.bat \ doskey C: = c: \ mycd.bat C:
barlop

Эта летучая мышь потерпит неудачу для c: \ blah.bat% USERPROFILE% (поэтому произойдет сбой cd или cdd% USERPROFILE%). Чтобы исправить, измените одинарные кавычки на двойные.
Бароп

39

Вы можете использовать pushd и popd:

C: \ WINDOWS> pushd \
C: \> POPD
C: \ WINDOWS>

Спасибо Джон, но это не совсем то, что я ищу.
Укант

2
Это именно то, что я хочу для своих пакетных скриптов, спасибо. Он даже меняет диски без использования переключателя \ d
Deebster

2
Внимание! С pushd/popdвами нужно учитывать возможность ошибок . В сценарии, когда у вас pushdесть каталог, который не существует, он не попадет в стек, но когда вы popdвыйдете из одного уровня: переменная не заполнена правильно, опечатка, неправильный диск ... Вы думаете, что вы находитесь в другом каталоге от того, в котором вы находитесь, с серьезной проблемой, например, когда вы удаляете файлы / директории. Бедствие (синтаксис Linux): cd $HOME; mkdir A; pushd A; mkdir B; pushd D; do stuff (in A, you believe in B); popd; rm -rf * вы верите в A, но ... слишком поздно, весь ваш домашний каталог исчез.
Hastur

4

если вы запускаете командный файл, вы можете использовать

  cd /D  %~dp0

Это вернется к исходному пути, из которого был запущен командный файл


4

Если вам нужно точное поведение bash, почему бы не использовать bash? У меня установлен Cygwin, и это очень приятно. Он не заставляет вас придерживаться инструментов UNIX - он с радостью вызовет любой исполняемый файл Windows. Для cmd.exebuildins вы можете создать псевдоним:

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

Там есть бесплатный cmdклон с дополнительными функциями , в том числе cd -под названием Take Console LE Command .

альтернативный текст


Это не работает
Укант

2
@TiNS: хорошо, я только попробовал это, и это работало для меня. Что это сделало для вас?
Хью Аллен

Я пытался с консоли (из главного окна)
Укант

1
@TiNS: мне неясно, что вы сделали, но, может быть, этот скриншот поможет? (ответ обновлен)
Хью Аллен

1

В зависимости от вашей цели, вы можете просто начать новый сеанс cmd, выполнив команду «cmd», переместить каталог и делать все, что вы хотите, а затем, когда вы выполните команду «exit», чтобы выйти из сеанса, вы вернетесь в каталог, в котором находились, когда Вы начали новую сессию.


1

Принятый ответ очень хорош для требования. Хотя мне часто приходится переключаться между многими недавними каталогами, а не просто двумя (текущими и предыдущими).

Поэтому я недавно сделал пакет, чтобы облегчить мою повседневную работу. https://gist.github.com/programus/2d2738b2a746140186f7738b678bdcec


Это так легко набрать cdx :. Благодарность! Это должен быть самый верный ответ.
AndreyWD

0

Что я делаю

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%
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.