【问题标题】:Sort files by Timestamp with the Windows DIR command使用 Windows DIR 命令按时间戳对文件进行排序
【发布时间】:2012-09-19 11:56:01
【问题描述】:

我想按照文件名中定义的时间戳对带有 DIR 的以下文件进行排序 - 首先是最旧的: 时间戳 = YYYYDDMM

NAME_20121410.dat
NAME_20121509.dat
NAME_20121609.dat

结果应该是这样的:

NAME_20121509.dat
NAME_20121609.dat
NAME_20121410.dat

我如何通过单线实现这一目标?

【问题讨论】:

  • @jeb - 实际上,我不认为一个简单的班轮是可能的。我相信 OP 希望根据名称中的日期进行排序,而不是基于最后修改或创建的时间戳。名称中的日期与文件时间戳之间可能没有关联。
  • 我想到了dir /O-N,但我重读了这个问题,发现愚蠢的日期格式YYYY DD MM 而不是YYYY MM DD。那么解决起来就有点棘手了
  • @jeb 是的,日期格式确实很愚蠢。我会要求文件的供应商使用更友好的格式(YYYYMMDD)

标签: windows sorting batch-file timestamp dir


【解决方案1】:

由于日期格式很愚蠢,您需要先拆分文件名并对重新排列的名称进行排序。
不是单行,但它可以工作(在批处理文件中)。

@echo off
(
  for %%A in (*_*.dat) do @(
    call set "name=%%A"
    call set "nameDate=%%name:*_=%%"
    call set "Year=%%nameDate:~0,4%%"
    call set "Day=%%nameDate:~4,2%%"
    call set "Month=%%nameDate:~6,2%%"
    call echo %%Year%%%%Month%%%%Day%% %%name%%
  )
) | sort | (
  for /F "tokens=1,*  delims= " %%A in ('more') DO @echo %%B
)

【讨论】:

    【解决方案2】:

    如果你可以使用 PowerShell,试试这个:

    PS II> ls *.dat | sort {$_ -replace '(\d{2})(\d{2})\.*','$2$1'}
    

    【讨论】:

      猜你喜欢
      • 2019-05-19
      • 2011-11-12
      • 2020-10-17
      • 2021-07-21
      • 2010-09-19
      • 2018-05-24
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      相关资源
      最近更新 更多