蓝盟诗人[LUC]蓝客联盟

关于名称末尾带“.”的目录的探讨

2010-11-26 09:56 作者: 来源: 本站 浏览: 1,708 views 我要评论 字号:
作者:1024k    文章来源:http://os.cn-admin.com/HTML/47052.htm 更新时间:2007-7-23

引言

我在重温以前的《电脑爱好者》杂志时,看到了2003年第22期的《我的目录你别乱闯》(甘肃紫翔)和第24期的《再谈我的目录你别乱闯》(惠龙)。再结合最近遇到的由“一键还原精灵”软件创建的“g.”目录,于是对之进行了一番实验并得出此文。
这篇文章最初完成于 2005.11.18 日,并向《电脑爱好者》投稿。但终因本人水平有限,文章没有被录用。后来我又于 2006.6.8 日将之拿出来,在多个版本的 Windows 系统中进行了测试,完善了其中的一些内容。2006.9.22 日我再重新看时又发现了一些不足,所以进行了小小的修订。
为了保证内容的连贯,我借鉴了上述两篇文章的部分内容,在此对两篇文章的作者表示感谢。
至于这篇日志,则是本人感觉只做成一个 PDF 格式的文件并不会有多少人看到。譬如最新一期(2007年第2期)的《电脑报》又发表了一篇这方面的文章。所以才想到把它再弄到这个 Blog 上。

一.关于末尾带“.”的目录名

在 Windows 系统中建立文件夹时名字的最后不能是“.”,不论你加多少个点,都会被 Windows 忽略。在命令提示符(CMD)下用“md”命令创建文件夹时同样如此。
我们知道符号“\”是路径的分隔符号,如果我们在创建文件夹时在最后追加一个“\”,明确的告诉系统前面的内容为文件夹名,那会是什么结果呢?
经验证,在资源管理器中创建文件夹时无法使用象“\”之类的字符作为文件夹名(如图1),所以这个设想在图形界面下失败了;但可喜的是,CMD中可以成功绕过这个限制。

关于名称末尾带“.”的目录的探讨
图1  命名限制

二.末尾带“.”目录的建立

通过实际操作,我发现在创建名称最后有“.”的文件夹时,要在目录名后再追加“.\”才会成功(下文在提到“含N个点”的目录名时,“.\”中的“.”都不计入数字“N”中)。而且单独建立的这种文件夹,在Windows资源管理器中是无法访问的。关于这句话要加上“单独”二字的原因,我会在介绍访问这种目录的方法时加以解释。
在CMD中,可以用“md a..\”建立名为“a.”的文件夹,也可用“md a...\”建立名为“a..”的文件夹,只要你愿意,多弄几个点也没关系。当然,同目录中的“a.”和“a..”也是两个不同的文件夹,毕竟它们的名字不同嘛。
而且“.”还可以位于目录的开头,如用“md .a..\”可以建立“.a.”文件夹。甚至还可以用“md ....\”建立名为“...”的文件夹,和建立“a.”一样,后面多几个点同样可以成功。
这种目录对于Windows资源管理器是非法的,用普通方法无法对其访问(如图2)。

关于名称末尾带“.”的目录的探讨
图2  打开“..”目录提示

注意,纯以点命名的文件夹最少要三个点才能在Windows资源管理器下可见。这可能是因为“.”和“..”都已被系统定义,分别代表当前目录和父目录(如在配置path变量的时候可以用“.”来代表文件当前目录;在CMD中用“cd..”命令可返回父目录等)。但是实际操作中我发现,如果使用“md ...\”,同样可以建立名为“..”的文件夹,它在Windows图形界面下不可见,不过在CMD中可以用dir命令看到它(如图3)。

关于名称末尾带“.”的目录的探讨
图3  创建“..”目录

如果某目录中除了系统生成的“..”目录,还存在用户创建的“..”目录,那么该父目录无法删除并提示出错。因为这个“..”目录在图形界面下不可见,所以问题很隐蔽。
我还遇到过因为没有正常弹出闪存盘就直接拔出,导致某文件夹中系统生成的“.”和“..”目录都丢失,造成该文件夹无法删除的问题。我用了一些办法都无法创建“.”目录,最后以对其格式化告终(惭愧啊……)。

那么,能不能“非法套非法”呢?答案是肯定的。你可以在“a.”目录存在的情况下,用“md a..\b..\”建立“a.”下的“b.”目录。注意,如果上一级的非法目录并不存在就直接运行“md a..\b..\”,则无法创建出任何非法的目录。

三.末尾带“.”目录的访问

虽然建立了这种非法目录,但在Windows资源管理器中或用cd命令都无法直接对其访问。但这并不表示我们就对它束手无策了。
Windows 及 CMD 为兼容早期的“8.3”命名规范,允许用目录名的前六个字符加“~1”进入该目录(如“Program Files”目录可以用命令“cd progra~1”进入)。如果有多个目录的前六个字符相同,则“~”后的数字按目录建立的先后顺序递增。
使用这种方法,就可能因“~1”替代了“.”而轻松进入以“.”结尾的文件夹。经验证,如果目录名的前三个字符是合法的,并且其后有“.”存在,就可以用这三个字符加“~1”的方式进入,而不需要保证“~1”前一定要有六个字符。但对于像“a.”、“a.b.”、“.a.”、“...”之类的目录,因为前三个字符中就出现了“.”,则该方法失效。我们在下面要讨论的,正是这种无法用“~1”进入的文件夹。

3.1  命令提示符下的操作

经过验证,CMD下的“cd”、“dir”、“del”等命令对这种文件夹都束手无策(乾坤大挪移之“~1”大法除外)。但除了它们,另有一群得力干将浮出水面。
下面以“a.”文件夹及其下的“1.txt”文件为例进行介绍:
首先是“type”命令,它是专门用来显示文本文件内容的。当然二进制文件也可以用它来显示,只不过显示出来的是一堆乱码,没有多大实际意义(倒是可以用来查看文件头)。例如用“type a..\1.txt”就可以在CMD中查看1.txt的内容(如图4)。

关于名称末尾带“.”的目录的探讨
图4  type命令演示

“copy”命令同样对这种非法目录名视若无睹。例如“copy 1.txt a..\”可以将1.txt复制到“a.”中,“copy a..\1.txt”则可以将“a.”中的1.txt复制出来。
在使用“copy”命令将文件从“a.”中复制出来时,必须知道文件的名字,如果你把它忘记了怎么办呢?“dir”可不支持这种非法目录哟,这里我向你介绍一条“曲线救国”之路,也算是dir命令无法使用时的应急方案吧。
我们知道,“copy”命令的参数中要求加上文件的路径,而这个路径必须是已存在的,否则会给出复制某个文件时找不到路径的提示,再加上“copy”命令支持通配符。于是,用“copy”暂时代替“dir”的方案“出炉”了:
要查看“a.”下的文件,只要用“copy”命令将它们复制到一个不存在的目录就可以了。如“copy a..\*.*  xyz\”(“*.*”可省略,“xyz”为不存在的目录名,“xyz”后的“\”不能省略),这时系统会逐一试图复制“a.”中的文件,但因“xyz”目录不存在,于是再逐一提示“系统找不到指定的路径”。于是“a.”中的文件名我们就可以一览无余了(如图5)。可惜这毕竟只是“兼职”方案,除了文件名,我们并不能像使用“dir”那样得到文件大小,修改时间等更详尽的信息。

关于名称末尾带“.”的目录的探讨
图5  copy兼职dir

CMD中的“Edit”命令的功能相当于Windows下的记事本程序,它同样可以对付这种非法目录名。使用“Edit a..\1.txt”就可以进入对1.txt文件的编辑环境了。但编辑完后只能用“Save”保存,而无法用“Save As”在这种目录中另存为一个新文件。另外该命令只对文本文件有一定意义,这也算它的局限之一吧。
好了,CMD中的命令就介绍到这里,我没有对其下的所有命令一一验证,毕竟这几个的平时用的还多些。如果需要,你可以自己再验证,过程并不难。

3.2  Windows资源管理器中的操作

对于一些对CMD命令并不熟悉的人,在CMD中操作需要记很多命令,没什么实用性。于是,本人在此隆重推荐更具人性化的操作方法——Windows资源管理器界面下的可视化操作!不过请注意,因带“.”的目录名在Windows下确实是非法的,所以如果要建立或删除它,还是要在CMD中才能完成(否则这篇文章还有什么意义呢)。
这个可视化操作,还是需要先在CMD中进行必要的前期准备的:
想在窗口下访问“a.”,其实非常简单,在同目录下创建比它多一个点的“a..”文件夹就可以了。现在双击“a..”,是不是可以打开了。不过要注意,虽然你打开的是“a..”目录,但展现在你眼前的却是“a.”中的内容。如果你想查看“a..”中的内容,那就再加一个点,创建“a...”就可以了!如果当前还有目录“a”,则可以双击打开“a.”目录以显示“a”目录中的内容。现在你知道为什么我在开始时要说“单独建立的这种文件夹,在Windows资源管理器中是无法访问的”了吧。
虽然窗口打开了,但你不一定能编辑其中的文件。经我初步验证,记事本程序可以打开其中的文本文件,而且和“Edit”命令很象——只能“保存”不能“另存为”。而Office系列虽然同出自微软,不同版本和不同组件却各有了同。只有Outlook(2000 / 2003版本)和PowerPoint 2003可以象记事本那样打开各自格式的文件;PowerPoint 2000只能打开不能保存;其余的Word、Excel、FrontPage、Access则连打开都成了“不可完成的任务”。
但我们一般不会直接在这个目录下修改文件的,所以虽然有上面所说的限制,但对我们影响并不大。而我们对这种目录使用更多的应该是复制和删除操作了。
这里有一个好消息:在这种目录下,你可以任意删除其中的文件或将它复制出来,这两个操作是没有限制的。
但如果你试图向这种目录中复制文件,则要费一番力气了。根据系统的不同,会有不同的问题出现:

◆对于 Windows 2000 各个版本
系统会把文件复制到你所打开目录的父目录下,并将文件重命名为去掉了最后的“.”的最深一层的非法目录名,当然是没有扩展名的。例如,你想要将“1.txt”复制到“a.”目录下的“b.”目录中,首先打开“b..”目录并复制,则你只能得到“a.”下的“b”文件。相比之下,还是用“copy”比较方便。
◆对于 Windows XP / 2003
在Windows XP / 2003中可以复制成功,但在父目录下另外生成一个以去掉了最后的“.”的最深一层非法目录名命名的文件夹。还用上面的例子,在Windows XP / 2003中除了已经可以复制成功外,还会在“a.”下生成“b”文件夹(不再是“b”文件了)。

用纯点建立的文件夹同样可以用这种办法访问,但需要注意的是,如果你使用的系统是Windows 2000 Professional版本,那么只要对其中的文件进行读取操作,就会弹出“程序错误”的对话框(如图6),随后就会结束并重新运行系统外壳程序Explorer.EXE。不过这并不影响你已经读取的文件。该问题在Windows 2000 Server及Windows XP/2003下不存在。

关于名称末尾带“.”的目录的探讨
图6  在Windows 2000 Professional中出现的错误

如果你想用这种目录保存一些秘密文件,就不能只用上面说的方法了,毕竟谁都可以看到其中的文件了。不用急,还记得刚才我说过可以建立在Windows下不可见的“..”目录吗,我们可以把文件藏在它里面嘛。单“不可见”这一条就要比“a.”之类的目录安全许多。你还可以在“..”下继续建立更多的层的“..”,这样的目录只有一层层的试才能知道文件到底在哪个目录下边。如果再为之建立些“衣冠冢”,“刀枪不入”型的保密方案诞生了!不过你自己一定要记好把文件藏在哪个目录下了,否则找到它也是个麻烦事。另外以后要对它操作也比较麻烦(毕竟保密是要些代价的嘛),为了可以在Windows资源管理器中完成操作,需要再一层层的建立“...”目录。

四.末尾带“.”目录的删除

最后就是如何删除这类文件夹了,这可用与“md”命令对应的“rd”命令实现,如“rd a..\”就可以把“a.”目录删除。如果目录非空,则需要加上“/s”参数,如“rd /s a..\”,随后按“y”确认。不想按“y”就再加上“/q”参数,这样可以启动安静模式以跳过确认直接删除,如“rd /s /q a..\”。
请注意,如果某目录中存在用户建立的“..”目录,则无法使用“/s”参数直接将该目录删除,必须先单独删除“..”目录,才可以删除对应的父目录。

五.补记

在实际操作中,我还发现了几点问题。因为我感觉这与本文探讨的初衷没有什么关系,但又确实是在相关操作中可能遇到的实际情况,所以决定在这里以补记的形式写出来。

◆问题一:
在使用“~1”方法进入目录时,如果目录名中有不位于开头或末尾的点,虽然它是合法的,却无法用“~1”的方法,而只能用全名进入。如果是名字中连点都没有的“优等公民”,那只有目录名字大于8个字符且必须输入足够的前6个字符时,再加“~1”才能进入。
◆问题二:
如果在“a.”目录不存在的情况下运行“md a..\b...\”,则生成“a”文件夹及其下的“b”和“b.”两个文件夹。
◆问题三:
在CMD下运行一次“cd ....\”(该目录可以不存在,并且目录名中的点大于3个就可以)没有任何提示,提示符显示的仍为原目录,用“dir”也没有问题,但再使用“cd”命令进入其他目录会提示找不到路径,这时必须运行一次“cd..”以“退出”刚才“进入”的“...”,才能恢复正常。
上述情况还有一个特例,就是首先保证第一次运行的是“cd ....\”(必须是这个目录),然后再继续运行一次“cd ....\”(这次欲进入的目录任意),则CMD没有任何提示并且提示符会返回磁盘根目录,与前一点相同,需要运行一次“cd..”才能正常使用“cd”命令。

后记

写这篇文章纯粹是因为爱好,写完后感觉对大家的实际用处并不是很大,可能这也是 CFan 没有录用这篇文章的原因吧,况且还这么多字,都快赶上一篇专题的容量了。
因为本人水平有限,其中错误在所难免,还望大家不吝赐教。对该文章有什么意见或建议,都可以告诉我,我会对其中的问题及时修正的。我的Email:
另外我曾于 2006.9.22 是把本文制作成了一个 PDF 文件,这里也一并提供下载了(本文中图片与 PDF 中图片非同一时间制作,可能有少许不符):点击下载此文件 http://www.mingelz.com/blog/wbc_showimg.asp?file=attachments/month_0703/b2007317231418.rar

打印
分享到:
复制链接

发表评论

*

* (保密)

Ctrl+Enter 快捷回复

会员登录关闭

记住我 忘记密码

注册会员关闭

小提示: 您的密码会通过填写的"电子邮箱"发送给您.