当前位置: 首页 > 知识库问答 >
问题:

是否可以在FOR循环中对文件进行排序/排序?

松锐藻
2023-03-14

我做了一些挖掘,似乎在任何地方都找不到简单的答案,也许我找错了地方。我只想按文件的修改时间排序,从最旧到最新。这可能吗?

for %%i in (Input/*.json) do (

)

共有2个答案

越雨泽
2023-03-14

如果您只想对它们进行排序,那么DIR将是最快的路由,您可以使用FOR /F循环解析该输出。

此代码将为您提供升序日期:

FOR /F "tokens=*" %%A IN ('
  DIR /B
  /O:D
  /A:-D 
  Input\*.json
') DO (
  ECHO(Found: "%%~A"
)

选项更改顺序<代码>/O:D或OD订单日期升序(最早的第一个)/O:D或O-D订单日期降序(最新的第一个)

选项更改所选项目的类型/A:-D或A-D选择文件项,A:D或AD选择目录项。

除非与开关一起使用以递归目录树,否则选项仅输出文件名,在这种情况下,它将输出文件路径。

唯一的问题(没有/S)是:

当您查看子目录时,不能从输出中提取任何其他变量信息,而不是相同的目录。

IE:您不能使用say%%~ tA打印日期/时间,而%%~ fA将给出错误的文件路径。

如果需要返回这些信息,则必须单独查找信息或从DIR cmd中提取所需信息,或使用递归子目录的选项。

感谢@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命令使用这些开关来匹配与可能匹配文件的任何子目录匹配的正则表达式(由于dircmd上的选项,没有文件的目录会被跳过,如上所述)

选项表示匹配不区分大小写

/v选项表示排除与模式匹配的结果

模式出现在双引号"\\输入\\.*\\.*"中,这是一个基本的正则表达式,其中句点.匹配任何内容,并且astrix*对mathc表示前一个字符的任何tmber次,因此.*表示匹配任何卡特尔零次或多次。

匹配目录路径的反斜杠在普通regex中是一个转义字符,在findstr中,我们可以将其设置为或要正确匹配,我选择了反斜杠,因为这与所有平台上regex的定义语法一致。

最后,我们必须有一个尾随'.\。“以确保我们忽略与子目录相关的所有条目。

很高兴地注意到,通过在FOR循环的命令部分中使用findstr,这可以更快地执行。

汪翰墨
2023-03-14

为了改进Ben的答案

  1. 将/S添加到目录,使%%~ tA和%%~ fA工作(完整路径),和

换句话说:

FOR /F "tokens=*" %%a IN ('DIR /B /S /O:D /A:-D Input\*.json') DO (
 ECHO "%%a"
)
 类似资料:
  • 问题内容: 可以说我有以下映射: 然后,我对父文档进行“ _geo_distance”排序,并能够对“ site.point”上的文档进行排序。但是,我还希望嵌套位置在父文档中按“ _geo_distance”排序。 这可能吗?如果是这样,怎么办? 问题答案: 不幸的是,没有(至少现在还没有)。 ElasticSearch中的查询仅标识与该查询匹配的文档以及它们的匹配程度。 要了解嵌套文档的用途,

  • 问题内容: 假设表格具有名称,ID,年龄,性别,学历等。ID是关键,并且该表也按名称,年龄和性别进行索引。我需要所有25岁以上的男学生,按其姓名排序。 这在mySQL中很简单: IndexDB允许创建索引并根据该索引对查询进行排序。但是它不允许多个查询,例如年龄和性别。我发现了一个名为queryIndexedDB的小型库,该库允许复合查询,但不提供排序结果。 那么,在使用IndexedDB时,有没

  • 这是我想做的代码,但什么也没有做。我甚至试过这个 但我找不到任何解决办法...有人能帮我吗?

  • 问题内容: 我有一个带有单词列表的文本文件,我需要使用Java按字母顺序对其进行排序。单词位于单独的行上。 我将如何处理,将它们读入数组列表,然后进行排序? 问题答案: 这是一个简单的四步过程,其中Stackoverflow问题解决了四个步骤中的三个: 阅读每一行并将其转换为Java String 将每个Java字符串存储在一个数组中(不要认为您需要引用它。) 排序数组 写出数组中的每个Java字

  • 问题内容: Javascript中的“ for…in”循环是否按声明的顺序遍历哈希表/元素?有没有按顺序执行的浏览器? 我希望使用的对象将被声明 一次, 并且永远不会被修改。 假设我有: 我进一步将它们用于: 我是否可以期望在大多数体面的浏览器中,“ A:“ Hello””总是排在“ B:“ World””之前? 问题答案: 当前,所有主流浏览器都按照定义它们的顺序遍历对象的属性。Chrome可以

  • 问题内容: 这是我的代码,它有效!但我希望能够根据名称,大小,修改日期等对文件列表进行排序 问题答案: 您可以定义许多不同的类来进行不同的比较,例如: 然后,您只需将它们换出: 要么