2014-11-06 48 views
0

我有一系列需要插入星期几的日志文件。例如,LOG-20141106-0000.TXT变为LOG-20141106-THR-0000.TXT。如何在Powershell中解析和处理来自文件名的日期?

我发现了this question这使我相信我不知道自己在做什么以及我的想法;自从我使用powershell以来已经有一段时间了。

到目前为止,我已经得到了这个来重命名这些文件,但我正在寻找能够取得日期的作品,并允许我插入星期几并插入适当的日期。

$txtPath = "h:\logs"  #source files 
$txtPath2 = "h:\logs\new" #renamed files 

Get-ChildItem $txtPath | foreach { 
    Move-Item $txtPath $txtPath2 ($_.Name -replace 'LOG','CLOG') 
} 

我有很难拉使用这种日期:

$file = Get-ChildItem $txtpath | 
Sort-Object { [DateTime]::ParseExact($_.BaseName.Substring(6,8),'yyyyMMdd',$null) } | 
Select-Object -Last 1 

接收的错误的起始索引不能长于字符串的长度。 H:\ logs(我觉得我指的是)有五个文件,名为CLOG-20141031-9999.TXT,其中9999是每个文件的不同序列号。

我在做什么错?

回答

3

ParseExact需要告诉它需要解析的字符串以及它的格式。您分别有$_.BaseName.Substring(6,8)yyyyMMdd。所以你问ParseExact转换为8个字符开始postition 6.在实践中,我们可以看到:

"CLOG-20141031-9999.TXT".Substring(6,8) 
0141031- 

这不会解析很好,而且很可能使Sort-Object失败的打算

"CLOG-20141031-9999.TXT".Substring(5,8) 
20141031 

子字符串以第0个字开头,所以第6个字符在第5个字符处。更新Substring,这应该是朝正确方向迈出的一步。这应该是你问题的根源。

然后根据你需要完成一周的工作,你可以使用这样的东西。

PS M:\Scripts> ([string]([DateTime]::ParseExact("CLOG-20141031-9999.TXT".Substring(5,8),'yyyyMMdd',$null)).DayOfWeek).SubString(0,3) 
Fri 

如果文件总是第一个连字符后的日期格式为是多一点弹性在名称长度变化的-split会很好的工作的日期提取。

"CLOG-20141031-9999.TXT".Split("-")[1] 
20141031 
相关问题