【问题标题】:Sort by name in batch file在批处理文件中按名称排序
【发布时间】:2015-01-21 13:08:01
【问题描述】:

我有一个按版本命名的 .sql 文件列表

EG:
5.1.9.5.sql
5.2.1.5.sql
5.5.1.7.sql
5.10.6.2.sql

但是当循环使用它们时:

for %%i in (*.sql) do (
    echo %%i
)

它们按以下顺序出现:
5.1.9.5.sql
5.10.6.2.sql
5.2.1.5.sql
5.5.1.7.sql

有什么办法可以让它们按照最先列出的顺序出现,就像windows文件系统一样?无需重命名所有文件。

【问题讨论】:

  • 一阶显然不是“正确”的顺序 - 词法上 5.10 小于 5.2。
  • 改写问题以反映这一点。

标签: file sorting batch-file


【解决方案1】:

我设法通过按创建日期对文件进行排序来解决问题。

for /f %%i in ('dir /b /o:d *.sql') do (
    echo %%i
)

【讨论】:

  • 只有在您的感兴趣的版本以惯常方式增加数字时才有效。如果您在下一个主要版本之后出现了早期版本的维护版本(例如 4.8.5.3.sql),它将中断。
【解决方案2】:

如果您发现自己处于文件创建日期和文件上次修改日期都没有帮助的位置,那么您可以使用我的JSORT.BAT utility。它是一个混合 JScript/batch 脚本,有一个 /N 选项,可以按数字而不是按词法对数字进行排序。该实用程序是纯脚本,可​​以在从 XP 开始的任何 Windows 机器上本地运行。

for /f %%F in ('dir /b /a-d *.sql^|jsort /n') do (
  echo %%F
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 2013-11-20
    • 2018-01-09
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多