Answers:
将以下内容保存到例如。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:
等来改变驱动器。
您可以使用push和popd:
C:\ WINDOWS>推入\ C:\>弹出 C:\ WINDOWS>
pushd/popd
你必须体谅错误的可能性。在脚本中,当pushd
目录不存在时,它将不会在堆栈中完成,但是当您popd
退出一个级别时:变量未正确填充,missprint,错误的驱动器...您认为位于不同的目录中从您所在的位置开始,出现严重问题,例如删除文件/目录时。灾难(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
内建函数,您可以创建一个别名:
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 Command Console LE。
对于要求来说,可接受的答案非常好。虽然我经常不得不在许多最新目录之间切换,而不仅仅是两个(当前目录和上一个目录)。
因此,我最近进行了批处理,以使我的日常工作更轻松。 https://gist.github.com/programus/2d2738b2a746140186f7738b678bdcec
cdx :
。谢谢!它应该是最受好评的答案。