Batch file 批处理文件以检查文件';s修改日期,然后将其与另一个日期进行比较

Batch file 批处理文件以检查文件';s修改日期,然后将其与另一个日期进行比较,batch-file,Batch File,假设我有几个文件的日期修改时间不同。它们中的一些以天为单位,而另一些则以小时或分钟为单位。如何访问日期修改时间,然后比较它们,并按天排序 例如,如果我有以下这组文件: Date File 2015/07/29 15:31 A1 2015/07/29 16:00 A2 2015/07/30 15:00 B1 2015/07/30 15:05 B2 我希望输出是: 2015/07/29 16:00 20

假设我有几个文件的日期修改时间不同。它们中的一些以天为单位,而另一些则以小时或分钟为单位。如何访问日期修改时间,然后比较它们,并按天排序

例如,如果我有以下这组文件:

Date                    File
2015/07/29  15:31       A1
2015/07/29  16:00       A2
2015/07/30  15:00       B1
2015/07/30  15:05       B2
我希望输出是:

2015/07/29  16:00
2015/07/30  15:05

如您所见,我不关心文件名,我只想知道每天最后修改日期的时间。

请尝试下面的命令,该命令将按文件最后修改日期/时间的顺序列出文件列表

dir /a:-D /O:-D /T:W
与dir命令一起使用的选项说明

/a:-D:将只列出目录中的文件名

/O:-D:将文件按最新日期排序


/T:W:将列出具有上次修改/上次写入时间的文件。

请尝试下面的命令,该命令将按文件上次修改日期/时间的排序顺序列出文件列表

dir /a:-D /O:-D /T:W
与dir命令一起使用的选项说明

/a:-D:将只列出目录中的文件名

/O:-D:将文件按最新日期排序


/T:W:将列出具有上次修改/上次写入时间的文件。

以下内容将返回唯一修改日期和每天最新时间的列表,最新日期将首先显示:

@echo off
set FOLDER=D:\StackOverflow\BatchTesting
setlocal EnableDelayedExpansion
set PREVIOUS=
for /F "skip=4 tokens=1-2" %%A in ('dir /N /A:-D /O:-D /T:W "%FOLDER%"') do (
    if not "%%B"=="File(s)" (
        if not "%%B"=="Dir(s)" (
            if not "%%A"=="!PREVIOUS!" echo %%A  %%B
            set PREVIOUS=%%A
        )
    )
)
endlocal
说明: 这种方法的核心元素是
dir
命令,该命令应用于变量
folder
给定的文件夹,其输出如下:

 Volume in drive D has no label.
 Volume Serial Number is 0000-0000

 Directory of D:\StackOverflow\BatchTesting

2015/07/31  00:30                12 foo.txt
2015/07/30  20:15               512 bar.txt
2015/07/30  18:45             1'432 somelog.log
2015/07/30  09:00               573 testscpt.bat
2015/07/28  17:10                99 crapfile.tmp
               5 File(s)          2'628 bytes
               0 Dir(s)  100'000'000'000 bytes free
for
循环解析
dir
输出,跳过标题并提取前两个(空格分隔)标记,即日期和时间,一行接一行。设置
dir
选项,以便仅列出文件(无目录),并根据修改日期/时间按降序排序

dir /a:-D /O:-D /T:W
两个外部
if
语句确保忽略
dir
输出的摘要行(如果在非英语系统上工作,则相应调整搜索词)

内部
if
语句将当前解析行的日期部分与前一行进行比较,前一行存储在变量
previous
中。它的值存储在比较之后,用于下一个循环迭代

因此,该批处理脚本的最终输出(与上述示例一起输入时)将为:

2015/07/31  00:30
2015/07/30  20:15
2015/07/28  17:10

要将输出写入文本文件,请通过重定向调用批处理文件(我们称之为
daytimes.bat
):

daytimes.bat > YourTextFile.txt

以下内容将返回唯一的修改日期和每天的最新时间列表,最新日期将首先显示:

@echo off
set FOLDER=D:\StackOverflow\BatchTesting
setlocal EnableDelayedExpansion
set PREVIOUS=
for /F "skip=4 tokens=1-2" %%A in ('dir /N /A:-D /O:-D /T:W "%FOLDER%"') do (
    if not "%%B"=="File(s)" (
        if not "%%B"=="Dir(s)" (
            if not "%%A"=="!PREVIOUS!" echo %%A  %%B
            set PREVIOUS=%%A
        )
    )
)
endlocal
说明: 这种方法的核心元素是
dir
命令,该命令应用于变量
folder
给定的文件夹,其输出如下:

 Volume in drive D has no label.
 Volume Serial Number is 0000-0000

 Directory of D:\StackOverflow\BatchTesting

2015/07/31  00:30                12 foo.txt
2015/07/30  20:15               512 bar.txt
2015/07/30  18:45             1'432 somelog.log
2015/07/30  09:00               573 testscpt.bat
2015/07/28  17:10                99 crapfile.tmp
               5 File(s)          2'628 bytes
               0 Dir(s)  100'000'000'000 bytes free
for
循环解析
dir
输出,跳过标题并提取前两个(空格分隔)标记,即日期和时间,一行接一行。设置
dir
选项,以便仅列出文件(无目录),并根据修改日期/时间按降序排序

dir /a:-D /O:-D /T:W
两个外部
if
语句确保忽略
dir
输出的摘要行(如果在非英语系统上工作,则相应调整搜索词)

内部
if
语句将当前解析行的日期部分与前一行进行比较,前一行存储在变量
previous
中。它的值存储在比较之后,用于下一个循环迭代

因此,该批处理脚本的最终输出(与上述示例一起输入时)将为:

2015/07/31  00:30
2015/07/30  20:15
2015/07/28  17:10

要将输出写入文本文件,请通过重定向调用批处理文件(我们称之为
daytimes.bat
):

daytimes.bat > YourTextFile.txt

但就像我在示例输出中发布的一样,我不在乎名称。我只想要时报,不需要删除文件。当然,我可以直接转到文件夹本身,按修改的日期排序,但根据我拥有的文件数量,我不希望这样。我只想让它显示每一天的最后一次,但就像我在示例输出中发布的一样,我不在乎名称。我只想要时报,不需要删除文件。当然,我可以直接转到文件夹本身,按修改的日期排序,但根据我拥有的文件数量,我不希望这样。我只想让它显示每一天的最后一次时间。要将输出写入文本文件,请调用批处理文件(我们称之为
daytimes.bat
),重定向为:
daytimes.bat>YourTextFile.txt
。是否有任何方法可以在输出中每天只有一个输出?这是我试图强调的最大问题,似乎没有人意识到。因为我将使用此代码的文件夹有1000多个文件,所以像这样对其进行排序会有点困难。我完成了回答,提供了与
dir
示例相关的输出,并添加了将其放入文本文件的方法。我想,这正是您想要的(如果我错了,请告诉我)。要将输出写入文本文件,请调用批处理文件(我们称之为
daytimes.bat
),并重定向:
daytimes.bat>YourTextFile.txt
。是否有任何方法可以让我在输出中每天只有一个输出?这是我试图强调的最大问题,似乎没有人意识到。因为我将使用此代码的文件夹有1000多个文件,所以像这样对其进行排序会有点困难。我完成了回答,提供了与
dir
示例相关的输出,并添加了将其放入文本文件的方法。我想,这正是你想要的(如果我错了,请告诉我)。