为什么每个驱动器都有自己的当前目录?
评论者 Dean Earley 问道:“为什么会有‘当前目录’和
电流驱动器?为什么不合并它们呢?”
精辟的回答:最初,每个驱动器都有自己的当前目录,
但现在他们没有,但看起来他们有。
好的,让我们解开那句话。你其实知道的足以回答
自己的问题;您只需将各个部分组合在一起即可。
将 Wayback 机器设置为 DOS 1.0。每个卷都由一个
驱动器号。没有子目录。这种行为被携带
从 CP/M 转发。
DOS 1.0 时代的程序不理解子目录;他们
仅通过驱动器号和文件名引用文件,例如,
B:程序.LST。让我们启动汇编器(编译器是为了丰富
people) 并汇编一个源代码在 A 驱动器上的程序,
但将输出发送到 B 驱动器。
A>asm foo the ".asm" extension on "foo" is implied
Assembler version blah blah blah
Source File: FOO.ASM
Listing file [FOO.LST]: NUL throw away the listing file
Object file [FOO.OBJ]: B: send the object file to drive B
Since we gave only a drive letter in response to the Object file prompt, the assembler defaults to a file name of FOO.OBJ, resulting in
目标文件被生成为 B:FOO.OBJ。
好的,现在让我们在 DOS 2.0 中引入子目录。假设你
想组装 A:\SRC\FOO.ASM 并将结果放入
B:\OBJ\FOO.OBJ。以下是你的做法:
A> B:
B> CD \OBJ
B> A:
A> CD \SRC
A> asm foo
Assembler version blah blah blah
Source File: FOO.ASM
Listing file [FOO.LST]: NUL
Object file [FOO.OBJ]: B:
汇编器从 A:FOO.ASM 读取并写入 B:FOO.OBJ,但由于
当前目录在每个驱动器的基础上进行跟踪,结果是
A:\SRC\FOO.ASM 和 B:\OBJ\FOO.OBJ 根据需要。如果当前目录
没有在每个驱动器的基础上进行跟踪,那么就没有办法
告诉汇编器把它的输出放到一个子目录中。因此,
DOS 1.0 程序实际上仅限于在
根目录,这意味着没有人会将文件放入
子目录(因为他们的程序无法访问它们)。
从 DOS 1.0 的角度来看,更改驱动器上的当前目录
执行更改媒体的逻辑等效项。 “哦,看,一个
完全不同的文件集!”
注意力持续时间短。
记住每个驱动器的当前目录已被保留
从那时起,至少对于批处理文件,虽然实际上并没有
Win32 中的每个驱动器当前目录这样的概念。在 Win32 中,
你所拥有的只是一个当前目录。各驱动的样子
有自己的当前目录是由 cmd.exe 伪造的,它使用
奇怪的环境变量来创建批处理文件的错觉
每个驱动器都有自己的当前目录。
Dean 继续说:“为什么不合并它们?我必须同时设置 dir 和
如果我想要一个特定的工作目录,请驱动。”
第二个问题的答案是,“它们已经合并了。它是
cmd.exe 试图假装他们不是。”如果你想
从命令提示符或批处理设置目录和驱动器
文件,只需在 CHDIR 命令中使用 /D 选项:
D:\> CD /D C:\Program Files\Windows NT
C:\Program Files\Windows NT> _
(请注意,CHDIR 命令允许您省略引号
包含空格的路径:由于该命令仅采用一个路径
论点,没有引号不会引起歧义。