首先我想指出,我确实了解Windows命令提示符cd
命令中/D
开关的用途。我只是好奇它为什么会这样工作而不是其他方式。正如我们所知道的那样:
使用/D开关可以在更改驱动器当前目录的同时更改当前驱动器。
但每次我输入(例如)cd F:
,很明显我想要改变驱动器。这就是为什么我认为这个开关本身是多余的原因。
那么明确设置此开关有什么意义?为什么不默认暗示它呢?
首先我想指出,我确实了解Windows命令提示符cd
命令中/D
开关的用途。我只是好奇它为什么会这样工作而不是其他方式。正如我们所知道的那样:
使用/D开关可以在更改驱动器当前目录的同时更改当前驱动器。
但每次我输入(例如)cd F:
,很明显我想要改变驱动器。这就是为什么我认为这个开关本身是多余的原因。
那么明确设置此开关有什么意义?为什么不默认暗示它呢?
cmd
试图模仿DOS。
起初,DOS对于每个驱动器都有一个“当前目录”,所以如果你写cd d:\folder
,你就会改变D
驱动器的当前目录。
你可以在这里阅读更多相关信息:
https://devblogs.microsoft.com/oldnewthing/20101011-00/?p=12563cmd.exe
中实现的说法是错误的,这是他罕见的错误之一。 - Harry Johnstoncmd.exe
并发现当你输入 cd d:\folder
(而你当前的驱动器是 c:
)时,它不会调用 SetCurrentDirectoryW
,但是当你输入 d:
时,它会使用 d:\folder
作为参数调用 SetCurrentDirectoryW
。你确定这个功能是在 WinAPI 中而不是在 cmd.exe
中吗? - Mark Segalset
命令将它们隐藏起来,但是您可以在从命令行启动的应用程序的环境块中看到它们。)如果我没记错的话,只有cmd.exe
设置这些变量,但是(大多数?)Win32 API函数尊重它们,如果您传递给它们一个相对于驱动器的路径。尝试在命令行应用程序中使用类似CreateFile("d:test.txt")
的东西,就会明白我的意思了。 - Harry Johnstondir a: <- See what dir I need
cd a:foo <- This one
dir a: <- See what file
dir b: <- See what dir I need
cd b:bar <- This one
dir b: <- See what file
a:program b:data <- use them both
dir a: <- See what dir I need
cd a:foo <- This one
dir a: <- See what file (lots of scroll)
dir b:\ <- See what dir I need (scroll)
cd b:\bar <- This one
dir b: <- See what file (lots of scroll)
a:\foo\program b:data <- use them both (had to remember "foo")
现在想象一下,它不止一个目录深。
再想象一下,如果程序不支持子目录,并且您需要在两个不同的驱动器上传递两个路径给它。
a:file
功能,特别感谢这个提示 :) - kefir500
cd
命令没有/d
选项(可能是因为没有人看到需要第二个驱动器;))。请参见此答案。 - Stephan