/

列出文件

.listfiles {path} {directories?} {recursive?} {pattern?} {fullpath?} {sortby?} {order?} 文档 ↗ 函数返回某个目录下的条目组成的可迭代对象

默认情况下,结果是 path 所指目录的直接子项的绝对路径组成的无序集合。路径相对于主源文件的位置进行解析,也可以是一个绝对路径。无论使用何种操作系统,都使用正斜杠(/)作为路径分隔符。

对于以下示例,假设存在如下目录结构:

  • assets
    • folder
      • file1.txt
      • file2.txt
      • file3.md
      • subfolder
        • nested-file1.txt
        • nested-file2.txt
        • nested-file3.md

示例 1

.listfiles {assets/folder} fullpath:{no}
  • file1.txt

  • file2.txt

  • file3.md

  • subfolder

结果是一个可迭代值,可以传递给 .foreach

示例 2

.foreach {.listfiles {assets/folder} fullpath:{no}}
    name:
    **File:** .name

File: file1.txt

File: file2.txt

File: file3.md

File: subfolder

完整路径

默认情况下,每个条目以其绝对路径的形式返回:

示例 3

.listfiles {assets/folder}
  • C:\Users\bbylw\Desktop\quarkdown-main\docs-zh\.\assets\folder\file1.txt

  • C:\Users\bbylw\Desktop\quarkdown-main\docs-zh\.\assets\folder\file2.txt

  • C:\Users\bbylw\Desktop\quarkdown-main\docs-zh\.\assets\folder\file3.md

  • C:\Users\bbylw\Desktop\quarkdown-main\docs-zh\.\assets\folder\subfolder

这可以与文件数据 函数结合使用,以读取文件内容:

示例 4

.foreach {.listfiles {assets/folder} directories:{no}}
    path:
    Content of .path::filename::codespan is .path::read::codespan

Content of file1.txt is File 1

Content of file2.txt is File 2

Content of file3.md is File 3

递归遍历

recursive:{yes} 设置为会遍历每一个嵌套子目录,并返回所有后代,而不仅仅是直接子项。

示例 5

.listfiles {assets/folder} recursive:{yes} fullpath:{no}
  • file1.txt

  • file2.txt

  • file3.md

  • subfolder

  • nested-file1.txt

  • nested-file2.txt

  • nested-file3.md

结果中绝不会包含根目录自身。

按名称过滤

传入 pattern 只会保留纯文件名匹配给定正则表达式的条目。无论 fullpathrecursive 如何设置,该模式始终只应用于文件名本身(绝不会应用于目录路径)。

示例 6

.listfiles {assets/folder} pattern:{.*\.txt} recursive:{yes} fullpath:{no}
  • file1.txt

  • file2.txt

  • nested-file1.txt

  • nested-file2.txt

排除目录

directories:{no} 设置为结果中只保留文件,从而在输出中省略子目录:

示例 7

.listfiles {assets/folder} directories:{no}
  • C:\Users\bbylw\Desktop\quarkdown-main\docs-zh\.\assets\folder\file1.txt

  • C:\Users\bbylw\Desktop\quarkdown-main\docs-zh\.\assets\folder\file2.txt

  • C:\Users\bbylw\Desktop\quarkdown-main\docs-zh\.\assets\folder\file3.md

排序

默认情况下,结果的顺序是未指定的,返回的可迭代对象是无序的。通过 sortby 选择排序标准会将结果切换为一个有序的可迭代对象:

效果
none不排序;结果为无序集合(默认)。
name按文件名排序,使用对人工友好的字母数字比较器。
lastmodified按文件的最后修改时间戳排序。

order 参数随后选择排序方向:

示例 8

.listfiles {assets/folder} sortby:{name} order:{descending} fullpath:{no}
  1. subfolder

  2. file3.md

  3. file2.txt

  4. file1.txt

批量引入源文件

由于结果是可迭代的,它可以与 .includeall 自然地组合:

示例 9

这会按字母顺序加载 chapters/ 下的每一个文件:

.listfiles {chapters} sortby:{name}::includeall

权限

.listfiles 遵循与其他文件读取函数相同的权限模型: