如果您只想对它们进行排序,那么 DIR 将是最快的路线,您可以使用 FOR /F 循环解析该输出。
此代码将为您提供升序日期:
FOR /F "tokens=*" %%A IN ('
DIR /B
/O:D
/A:-D
Input\*.json
') DO (
ECHO(Found: "%%~A"
)
/O 选项更改顺序。 /O:D 或 /OD 订单日期升序(最早的在前)/O:-D 或 /O-D 订单日期降序(最新的在前)
/A 选项更改所选项目的类型。 /A:-D 或 /A-D 选择文件项目,/A:D 或 /AD 选择目录项目。
/B 选项仅输出文件名,除非/S 开关与它一起使用来递归目录树,在这种情况下它将输出文件路径。
唯一的问题(没有/S)是:
当您查看子目录而不是同一目录时,您无法从输出中提取任何其他 FOR 变量信息。
IE:你不能用%%~tA来打印日期/时间,%%~fA会给出错误的文件路径。
如果需要返回这些信息,则必须单独查找信息或从 DIR cmd 中抓取所需信息,或使用递归子目录的 /S 选项。
感谢@Michel de Ruiter 注意到这一点,并提请我注意更新这一点,现在我将扩展你的扩展位。
如果您想从 for 循环中获取路径或时间戳等,但又不想浪费时间或从子目录中获取结果,您可以修改为以下版本。
这使用Findstr 使用基本正则表达式删除初始搜索目录下的所有子目录。
FOR /F "tokens=*" %%A IN ('
DIR /B
/O:D
/A:-D
Input\*.json
^| findstr /i /v "\\input\\.*\\.*"
') DO (
ECHO(Found: "%%~A"
)
在这种用法中,findstr 命令使用这些开关来匹配正则表达式,该正则表达式匹配可能匹配文件的任何子目录(由于dir cmd 上的选项,如上所述,跳过没有文件的目录)
/i 选项表示不区分大小写
/v 选项表示排除与模式匹配的结果
模式出现在双引号 "\\input\\.*\\.*" 这是一个基本的正则表达式,其中句点 . 匹配任何内容,而 astrix * 表示数学上的前一个字符任何时间,所以.* 表示匹配任何字符零次或多次。
\\ 匹配目录路径的反斜杠 \ 是普通正则表达式中的转义字符,在 findstr 中,我们可以将其设置为 \ 或 \\ 以正确匹配,我选择了 \\,因为与所有平台上为正则表达式定义的语法一致。
最后,我们必须有一个尾随 `.\." 以确保我们忽略与子目录相关的所有条目。
请注意,通过在FOR 循环的命令部分中使用findstr,可以更快地执行。