Перейдіть до попереднього каталогу у командному рядку 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>

Thx Джон, але це не зовсім те, що я шукаю.
укант

2
Це саме те, що я хочу для своїх пакетних сценаріїв, дякую. Він навіть змінює диски, не потребуючи перемикача \ d
Deebster

2
Попередження З pushd/popdвами повинні благорассудітельной можливістю помилок . У сценарії, коли ви pushdне існує каталогів, він не закінчиться в стеці, але коли ви popdвийдете з одного рівня: змінна не заповнена правильно, помилка, неправильний диск ... Ви думаєте бути в каталозі іншим з тієї, в якій ви знаходитесь, з серйозними проблемами, наприклад, коли ви видаляєте файли / dirs. Катастрофа (синтаксис Linux): cd $HOME; mkdir A; pushd A; mkdir B; pushd D; do stuff (in A, you believe in B); popd; rm -rf * ви вірите в A, але ... занадто пізно, весь ваш домашній каталог зник.
Гастур

4

якщо у вас запущений пакетний файл, який ви можете використовувати

  cd /D  %~dp0

Це повернеться до початкового шляху, звідки був запущений пакетний файл


4

Якщо ви хочете точної поведінки bash, чому б не використовувати bash? У мене встановлено cygwin, і це дуже приємно. Це не змушує вас дотримуватися його інструментів UNIX - він із задоволенням називатиме будь-які Windows виконуваними. Для cmd.exeвбудованих файлів ви можете створити псевдонім:

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 Command Console LE .

alt текст


Це не працює
ukanth,

2
@TiNS: Добре, я просто спробував це, і це працювало на мене. Що це зробило для вас?
Х'ю Аллен

Я спробував з консоллю (з головного вікна)
ukanth

1
@TiNS: Мені не ясно, що ти робив, але, можливо, цей скріншот допоможе? (відповідь оновлена)
Х'ю Аллен

1

Залежно від того, яка ваша мета, ви можете просто почати новий сеанс cmd, зробивши 'cmd', перемістити каталог і робити все, що завгодно, коли ви потім 'выйдете', щоб залишити сеанс, ви повернетеся в той каталог, в якому ви були ви розпочали нову сесію.


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.