使用Windows DIR命令按时间戳对文件进行排序
我想按文件名中定义的时间戳对以下文件进行DIR排序-最早的优先: 时间戳=yyyydmm使用Windows DIR命令按时间戳对文件进行排序,windows,sorting,batch-file,timestamp,dir,Windows,Sorting,Batch File,Timestamp,Dir,我想按文件名中定义的时间戳对以下文件进行DIR排序-最早的优先: 时间戳=yyyydmm NAME_20121410.dat NAME_20121509.dat NAME_20121609.dat 结果应该如下所示: NAME_20121509.dat NAME_20121609.dat NAME_20121410.dat 如何使用一行程序实现这一点?由于日期格式很愚蠢,您需要首先拆分文件名并对重新排列的名称进行排序。 不是一行程序,但它在批处理文件中工作 @echo off ( for
NAME_20121410.dat
NAME_20121509.dat
NAME_20121609.dat
结果应该如下所示:
NAME_20121509.dat
NAME_20121609.dat
NAME_20121410.dat
如何使用一行程序实现这一点?由于日期格式很愚蠢,您需要首先拆分文件名并对重新排列的名称进行排序。 不是一行程序,但它在批处理文件中工作
@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
)
由于日期格式很愚蠢,您需要首先拆分文件名并对重新排列的名称进行排序。 不是一行程序,但它在批处理文件中工作
@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
)
如果可以使用PowerShell,请尝试以下操作:
PS II> ls *.dat | sort {$_ -replace '(\d{2})(\d{2})\.*','$2$1'}
如果可以使用PowerShell,请尝试以下操作:
PS II> ls *.dat | sort {$_ -replace '(\d{2})(\d{2})\.*','$2$1'}
@杰布-事实上,我不认为简单的一行是可能的。我相信OP希望基于名称中的日期进行排序,而不是基于上次修改或创建的时间戳。名称中的日期和文件时间戳之间可能没有关联。我想到了dir/O-N,但我重新阅读了这个问题,看到了愚蠢的日期格式YYYY DD MM而不是YYYY MM DD。这样做有点棘手solve@jeb是的,日期格式确实很愚蠢。我将要求该文件的供应商使用更便于排序的格式YYYYMMDD@jeb-事实上,我不认为简单的一行是可能的。我相信OP希望基于名称中的日期进行排序,而不是基于上次修改或创建的时间戳。名称中的日期和文件时间戳之间可能没有关联。我想到了dir/O-N,但我重新阅读了这个问题,看到了愚蠢的日期格式YYYY DD MM而不是YYYY MM DD。这样做有点棘手solve@jeb是的,日期格式确实很愚蠢。我将要求该文件的供应商使用更便于排序的格式YYYYMMDD