正则表达式匹配dir输出中的当前目录

问题描述:

我尝试从Windows中的dir命令生成的输出中提取特定目录的创建日期。正则表达式匹配dir输出中的当前目录

实施例:

dir c:\folder\Myfolder\ /T:C /A:D

输出:

22-11-2013 15:09 <DIR>   . 
22-11-2013 15:09 <DIR>   .. 
21-03-2015 14:32 <DIR>   Folder1 
12-09-2014 11:03 <DIR>   Folder2 
18-10-2016 13:29 <DIR>   Folder3 

予以使用正则表达式试图管道输出到findstr。但dir c:\folder\Myfolder\ /T:C /A:D | findstr \r "\."显示...两行。

我需要的是日期和时间Myfolder(即与单个.行)为了创建此文件夹的时间戳。

dir c:\folder\Myfolder\ /ad /t:c|findstr /L /e /c:" ." 

应在年底/c:" ."常量字符串空间得到您的desireed数据

FINDSTR /L文字/e

+0

'/ L'选项不会伤害,但它是多余的,因为'/ C'默认为文字搜索。一个可比较的正则表达式是'findstr/rc:“\。$”'。 – dbenham

+0

@Magoo感谢您的建议 – Steve

对于最后写入时间,不需要管道到findstr。相同的信息可以被检索为

for /d %%a in ("c:\folder\Myfolder") do echo %%~ta 

使用~t修饰符for替换参数来检索文件夹的时间戳。

但是,这种方法不能用于检索文件夹创建时间(如Magoo评论)。为了找回它,你将需要保持你原来的做法

dir /tc /ad "c:\folder\Myfolder\.?" | findstr /e /c:" \." 

(该.?只是缩短至findstr过滤列表,并在dir枚举时间)

或者你可以使用wmic(以这种情况下,有必要更改文件夹命名格式,加倍反斜杠)

wmic fsdir where name="c:\\folder\\Myfolder" get CreationDate /value 

在这种情况下,你会得到类似

CreationDate=20160927171354.871547+120 
+0

这为您提供了最后编写的时间,而不是像原始代码中那样创建时间。 – Magoo

+0

@Magoo,当然你是对的,我看到了'时间戳',并且自动将我的想法转到'最后写入时间',这是我的错。 –

+0

谢谢@MCND。此解决方案有效。我已经在批处理文件中使用了'wmic'选项,但为许多文件夹调用'wmic'的速度相当慢。所以我选择使用'dir'。 – Steve