参考链接... Microsoft Windows 上的 attrib 命令。
选项的描述/d
...“将 attrib 和任何命令行选项应用于目录。”
attrib
不带路径使用仅打印当前目录中文件的属性。当在attrib
没有路径的情况下使用时,该/d
选项似乎意味着“除了文件之外还对目录执行此操作”,这不是我从描述中收到的理解,/d
所以我不确定描述是否缺少,或者是否以某种方式存在应该是显而易见的。我知道文件和目录在 Windows 中是不同的(但在 Linux 中目录是文件类的子类)。
通过使用只读属性进行测试+r
/-r
是我的一些观察结果......
attrib prints attributes for files in the current directory
attrib /d prints attributes for files and directories in the current directory
attrib +r /s /d dir sets the attributes for the directory not recursively
attrib +r /s /d dir\* sets the attributes for files and directories recursively
attrib +r /s /d * sets attribs for files and dirs in current dir and recursively
选项的描述/s
...“将 attrib 和任何命令行选项应用于当前目录及其所有子目录中的匹配文件。” 由于没有提到递归,也许期望应该是第三、第四和第五个命令不应该递归,但在测试中我们可以证明递归是可能的。存在文档问题...对“所有子目录”进行操作与递归不同,递归被理解为所有级别的子目录。
为什么第三个例子还没有递归?在我看来,第三个示例是第五个示例的子集。
attrib
以一种有点非常规的方式处理路径参数。与大多数现代工具不同,它并不简单地使用给定路径作为开始递归的根 - 而是将路径分成两部分(目录和基本名称),然后“目录”部分成为递归的起点搜索,而“基本名称”用作搜索结果的过滤器。因此,虽然第三个示例 (
attrib /s /d dir
)是递归的,但它并不意味着“递归地搜索目录dir
中的所有对象”(就像大多数人所期望的那样),而是意味着“递归地搜索当前目录中名为的对象dir
”。递归搜索恰好找到一个结果 (.\dir
)。另一方面,
attrib /s /d foo\*
的处理方式如下dir="foo", match="*"
,它从当前目录开始搜索foo
,并查找与 name 匹配的任何子目录*
。Cmd.exe 中的内置
dir
命令的操作方式相同。例如,如果您这样做dir /s foo
;它可能会输出one\two\three\foo
.