深入了解以“.”结尾的文件夹

没见过这样的文件夹或是不知道我要说什么?看下面这张图就会知道了。

其中有六个文件夹是以 . 结尾的。你可以试着在windows模式下直接创建这样的文件夹,但是你会发现你永远无法得到以 . 结尾的文件夹。这是为什么?你可以在cmd下输入 md x..\ 来创建 x. 文件夹,而不是 x.. 文件夹,这又是为什么?我敢保证如果你能在windows模式下创建一个文件夹并且成功输入 x..\ 这些字符的话,文件夹的名字必定是 x. !不过遗憾的是windows会在你按下键盘的 \ 符号时提示“文件名不能包含下列任何字符之一:\ / : * ? " < > | ”。

在cmd下你可以输入“\ / : * ? " < > | ”任意字符而不会被终止。当你使用md命令来创建一个文件夹时,如果输入 md x..     时,将创建出 x 文件夹而不是 x. 也不是 x.. !这和在windows下直接创建这样的文件夹是一个道理:尾部的几个 . 被过滤了!到此我们就可以知道 \ 这个符号在特殊文件夹的创建起了很重要的作用。从上面的分析我们已经知道在windows模式下命名文件夹时是是无法输入 \ 这样的特殊字符的!于是在cmd下输入 md x..\ 时,以一个点 . 结尾的文件夹就创建出来了。由此可知 \ 符号防止了那些 . 被过滤掉。然而为什么还有一个点被过滤掉了呢?UMU的文章《[Windows 文件系统]U..\ 无法正常访问的真正原因》会带来些启示。下面来看些“奇怪”的现象……

根据上面的原理,我们可以在cmd下输入 md x...\     创建出以两个点 . 结尾的文件夹,接着三个点、四个点、五个点……看上图以 x 开头的5个空文件夹(注意是空文件夹),不论你删除哪个文件夹(而且你最多只能删除一个文件夹,这不是我要求你这样,不信你试试?)都将成功,并且在你刷新窗口时你会发现最终消失的文件夹居然是不以点结尾的文件夹 x ,而其他四个结尾带点的文件夹“安然无恙”!这是不是说明我们在任意一个文件夹上的任意操作最终都将反应到x文件夹上?这5个文件夹本质上也就是一个即文件夹 x ?下面的非空文件夹的现象会推翻这些疑问。

当你在文件夹 x(或x.)创建一个文本文件1.txt时,x.(或x)也将出现1.txt,然而在其他三个文件夹 x.. , x...      , x.... 中并没有发现1.txt文件,有的人可能会说:“其实你在地址栏输入C:\x..\1.txt,或C:\x...\1.txt,或C:\x....\1.txt都将成功访问1.txt文件,这说明1.txt文件其实是存在于那三个文件夹中的!”但是我建议先看下面这张图(注意地址栏):

当我在地址栏输入C:\x....................................\1.txt也将成功访问1.txt文件,其实不论x后点的个数有多少(当然肯定有个上限)都将成功访问1.txt文件,且这个规律适合任何有权限访问的文件夹!并且在cmd下也是这样的情况,如下图:

这个现象我们可以理解为操作系统在这这样的情况下过滤了结尾的 . 或 \ (如果 \ 后不带文件名的话)。也许这就能说明上面讨论的那5个文件夹并不是一体的!当我们试图删除上面提到的“其他三个文件夹”(即x.. , x... , x....)时,发生了错误,如下图:

它提示“无法删除 1: 找不到指定文件。请确定指定的路径及文件名是否正确。”然而删除文件夹 x 或 x. 时却可以正常删除!看来 x 与 x. 的关系更加密切……为了证实“其他三个文件夹”的“独立性”,我分别成功地在这三个文件夹里创建文本文件1.txt。要是他们是相同的或“一体”的,那肯定会报错!不过从以上的分析可知它们也并不具有完全的独立性!它们是有联系的!再看下面现象:我在cmd下输入 md x........\ 创建了以7个点结尾的文件夹,然而当我双击试图打开它时发生了如下错误:

但是在我创建以6个点结尾的文件夹后,它就可以正常访问了。不过这时由于不存在以5个点结尾的文件夹,以6个点结尾的文件夹也将不能通过双击访问了!以此类推……我用下面这张图来表示这样的“信息结构”!

我知道我这样的表示方法肯定不能说明许多问题,希望大家能给点意见。最后我还要指出很重要的一点!当带点结尾的文件夹被孤立时,即不存在上图那样的任何联系时,此文件夹表现出文件的一些性质!限于篇幅我就不进一步讨论了,有兴趣的朋友也来研究研究吧:-)。大家互相补充补充。当然要想研究深透那就必须对windows这个操作系统了如指掌了……

噢,对了,要删除以点 . 结尾的文件夹在cmd下删除,比如:输入 rd x...\ 就可以删除 x.. 文件夹!以此类推了……注意保持命令的完整!
一个没有探究价值的问题,以上所有文件夹都是独立的。
当我们创建一个..结尾的文件夹时,只显示一个.,原因是在windows识别时过滤了一个.,当我们试图访问或操作这个目录时,windows又过滤了一个.,那么这时我们实际访问的是一个没有.的目录--一个不存在的目录,所以无法访问。
但如果我们创建一个没有.的目录在同样的父目录下,那么这个访问就有效,也就是说这个..的文件夹波及了没有.的文件夹,而实际上这不是同一个文件夹。
而当这个.增加到2个以上时,目标文件夹就会带有一个或以上.,也是不可访问的了。

时间: 2007-03-19

Python3.遍历某文件夹提取特定文件名的实例

批量处理文件时,常需要先遍历某个路径提取特定条件的文件名.这篇写一个暴力遍历但很简洁的方法,真的非常简洁但是非常暴力. 例子目标是:获得存放遥感数据的文件夹下文件夹名以"_BAD"结尾的文件夹内容.因为该文件下分级很多(年/月/产品类型/),目标文件夹很多且存在在最后一级,手动查看很烦. 代码如下(知识点总结代码后): # -*- coding: utf-8 -*- """ 遍历某路径下所有文件夹,获得特定文件夹下所有文件 很暴力,真的遍历了所有的文件夹

python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法

如下所示: dir_in = os.path.join(os.path.dirname(__file__), r"oldApp")     dir_in = unicode(dir_in, r"GBK")     dir_out = os.path.join(os.path.dirname(__file__), r"newApp")     dir_out = unicode(dir_out, r"GBK")     redi

python高效过滤出文件夹下指定文件名结尾的文件实例

如下所示: import os def anyTrue(predicate, sequence): return True in map(predicate, sequence) def filterFiles(folder, exts): for fileName in os.listdir(folder): if os.path.isdir(folder + '/' + fileName): filterFiles(folder + '/' + fileName, exts) elif an

动感网页相册 python编写简单文件夹内图片浏览工具

不知道大家有没有这样的体验,windows电脑上查看一张gif图,默认就把IE给打开了,还弹出个什么询问项,好麻烦的感觉.所以为了解决自己的这个问题,写了个简单的文件夹内图片浏览工具. 效果图 以E盘某一文件夹为例 效果图 实现思路 业务代码 # coding:utf-8 import sys reload(sys) sys.setdefaultencoding('utf8') # __author__ = '郭 璞' # __date__ = '2016/8/5' # __Desc__ = 自

BAT批处理之文件与文件夹操作代码(附xcopy命令详解)

批处理中的文件.文件夹操作,xcopy命令的用法. 一,建bat文件自动执行复制,删除命令. 例1:复制cd.dll文件至windows\system32的bat文件内容: 复制代码 代码如下: copy cd.dll %windir%\system32 例2:卸载windows\system32目录中的cd.dll,即把上面复制的文件删除: 复制代码 代码如下: del %windir%\system32\cd.dll 例3:删除download文件夹中的文件,例子如下: 复制代码 代码如下:

xcopy 实现批处理拷贝文件或文件夹

xcopy 是一个很有用的doc命令,应该学习学习! 可以用xcopy实现,例如: C:\>xcopy C:\ppt\*.* D:\ppt\ /s /e 这条命令的意思就是把C盘下的PPT文件夹全部拷贝到D盘 XCOPY 还有众多的功能, 是加参数来完成的.上面的/s /e 参数的作用分别是把子目录和空目录都复制过去, 一些使用举例和参数说明如下: 1.如只是单纯地复制 E:\ 盘上所有文件到 D:\ 盘上,就输入" xcopy e:\*.* d: /s /h "就行啦!如果在复

PHP递归遍历指定文件夹内的文件实现方法

今天早上在地铁上看了关于文件和文件夹的一章,正好最近刚搞懂linux的文件系统,觉得对文件属性的访问跟Shell命令很像,所以想晚上来实践一下. 发现php的文件夹函数好像没有提供遍历文件夹下的所有文件(包括子目录中的文件),于是,就想自己实现一个. 在写的时候发现一些操作文件夹的函数并不是自己想的那样.比如,dirname()根据提供的完整文件路径来取得文件所在的文件夹的路径,但如果你传入的是文件夹,它取的就是它的父文件夹.这点要明白.basename()也是同样的道理,传入文件夹路径取得就是

用vbs实现删除名称中有撇号的文件夹

问: 您好,脚本专家!如何删除名称中有撇号的文件夹? -- JH 答: 您好,JH.噢,是的,撇号:每个脚本编写者的主要灾难来源.撇号看起来只是一个简单的小字符,但切莫让它的外表所迷惑:撇号(或单引号)可能是键盘上最致命的字符.无论您是使用 Active Directory.数据库,还是文件系统,一个撇号就可以给您的脚本带来全部灾难.正如 Bart Simpson 曾经形容 Hershey? 的 Milk Dud 糖果,撇号也是"甜外毒内". 注意:不,Milk Dud 里面并非真的有

java删除文件和文件夹具体实现

1,验证传入路径是否为正确的路径名(Windows系统,其他系统未使用)Java代码 复制代码 代码如下: // 验证字符串是否为正确路径名的正则表达式  private static String matches = "[A-Za-z]:\\\\[^:?\"><*]*";  // 通过 sPath.matches(matches) 方法的返回值判断是否正确  // sPath 为路径字符串 2,通用的文件夹或文件删除方法,直接调用此方法,即可实现删除文件夹或文件