递归和 Windows attrib 命令

递归和 Windows attrib 命令

参考链接...微软在 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 和任何命令行选项应用于当前目录及其所有子目录中的匹配文件。”由于没有提到递归,也许应该预期第 3、4 和 5 个命令不应该递归,但在测试中我们可以证明递归是可能的。存在文档问题……对“其所有子目录”进行操作与递归不同,递归被理解为所有级别子目录。

为什么第三个例子还不是递归的?在我看来,第三个例子是第五个例子的子集。

附录对于评论者说目录不能是只读的...... 图片

答案1

attrib以某种非常规的方式处理路径参数。与大多数现代工具不同,它不会简单地使用给定的路径作为开始递归的根 - 而是将路径分成两部分(目录和基本名称),然后“目录”部分成为递归搜索的起点,而“基本名称”用作筛选获取搜索结果。

因此,虽然第三个例子(attrib /s /d dir递归的,它并不意味着“以递归方式搜索目录dir中的所有对象”(大多数人都这么认为)——相反,它的意思是“以递归方式搜索当前目录中名为 的对象dir”。递归搜索只会找到一个结果 ( .\dir)。

另一方面,attrib /s /d foo\*处理方式如下dir="foo", match="*",它从当前目录开始搜索foo并查找与名称匹配的任何子目录*

dirCmd.exe 中的内置命令以相同的方式运行。例如,如果你输入;dir /s foo它可能会输出one\two\three\foo

相关内容