让我们先回到DOS 1.0那会

DOS 1.0操作系统不支持子目录、小写文件名或长于8.3的文件名。当cxdgz试图执行汇编程序(或者编译器,如果你够时髦的话)时,实际上会出现以下交互对话:

A asm foo //。asm文件后缀将隐式添加到foo文件名之后。

汇编程序版本XXX

源文件: FOO。空对地导弹

列表文件[FOO。LST]: //直接点击回车接受默认设置。

对象[foo . obj]://直接点击回车接受默认设置。

您只需要输入文件的基本名称(这里是foo),LST和OBJ文件后缀将自动添加到文件名中。实际上,我认为您也不能禁用扩展,因为它们总是被添加的。

但是如果你不想生成LST文件呢?汇编程序肯定会要求输入文件名。如果不输入任何文件名,汇编程序将创建一个与源文件同名的LST文件。

这个时候,黑魔法要来了

假设您想将LST文件直接发送到打印机,但不想在软盘中创建此文件,因为软盘可能没有足够的空间,或者您不想花时间创建最终将被删除的文件。因此,您输入了“PRN”作为文件名。

此时,汇编程序并不知道“神奇”的文件名。因此,它将尝试创建文件“PRN。LST”并试图在其中写些什么。装配工就像被蒙在鼓里。它认为它想把数据写入文件。事实上,它想写的东西已经直接发送到打印机了。

如果你想完全忽略输出,你可以输入“NUL”,你当然知道怎么做。

如果你想把内容输出到屏幕上,你可以明智地输入“con”。

如果你仔细阅读这篇文章,你应该明白上面的故事已经解释了以下两件事:

00-1010回答:如果添加文件后缀使法术无效,那么当汇编程序将LST添加到文件名中时,法术就不能正常工作,这违背了法术创建的初衷。

00-1010回答:因为在DOS 1.0操作系统中,没有子目录。系统中只有一个目录,就像我们今天说的,应该叫“根目录”,但是当时因为系统中没有子目录,人们就不给它取一个合适的名字。人们只是这样说:磁盘上的文件,而不是某个目录中的文件。如果子目录中不存在魔法文件,那么在cxdgz尝试使用CHDIR命令进入子目录后,你会发现“NUL”的输入已经不起作用了,只是对你来说:这个应该有一些魔法吧?

但是,这么长时间过去了,为什么我们还支持这些神奇的文件名呢?

因为即使是现在,仍然有一部分人依赖这种工作机制。只需打开一个批处理脚本,我们就可以看到类似于NUL或“如果存在directoryname \ nul”的文字。此外,所有文件都会有这样一句话:请使用“复制CON …”来创建文件。

为什么即使我添加了文件后缀,这个法术依然奏效?

prn(医嘱prn全称)-冯金伟博客园