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

39

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

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

cd -

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

ukanth
источник

Ответы:

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

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

ggonsalv
источник
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», чтобы выйти из сеанса, вы вернетесь в каталог, в котором находились, когда Вы начали новую сессию.

user210211
источник
1

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

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

Programus
источник
Это так легко набрать 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%
amphibient
источник