Ответы:
Сохраните следующее, например. 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:
т. Д. Для смены диска.
Вы можете использовать pushd и popd:
C: \ WINDOWS> pushd \ C: \> POPD C: \ WINDOWS>
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, но ... слишком поздно, весь ваш домашний каталог исчез.
Если вам нужно точное поведение bash, почему бы не использовать bash? У меня установлен Cygwin, и это очень приятно. Он не заставляет вас придерживаться инструментов UNIX - он с радостью вызовет любой исполняемый файл Windows. Для cmd.exe
buildins вы можете создать псевдоним:
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
$
Там есть бесплатный cmd
клон с дополнительными функциями , в том числе cd -
под названием Take Console LE Command .
В зависимости от вашей цели, вы можете просто начать новый сеанс cmd, выполнив команду «cmd», переместить каталог и делать все, что вы хотите, а затем, когда вы выполните команду «exit», чтобы выйти из сеанса, вы вернетесь в каталог, в котором находились, когда Вы начали новую сессию.
Принятый ответ очень хорош для требования. Хотя мне часто приходится переключаться между многими недавними каталогами, а не просто двумя (текущими и предыдущими).
Поэтому я недавно сделал пакет, чтобы облегчить мою повседневную работу. https://gist.github.com/programus/2d2738b2a746140186f7738b678bdcec
cdx :
. Благодарность! Это должен быть самый верный ответ.
Что я делаю
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%