首页 > 解决方案 > 如何使用powershell在txt文件中按日和月过滤

问题描述

我在我的脚本中使用登录,并用日、月和时间来写:

$LogTime = Get-Date -Format "dd-MM HH:mm"

我想从我想这样做的文件中删除所有超过一个月的行,但它不起作用:

$DateOld = (get-date (get-date).addDays(-30) -UFormat "%d-%m")
    
$RemoveLog = get-content -Path C:\.....\Log\UserLog.txt | where {($_.split('-'))[1] -gt $DateOld} | Set-Content "C:\......\Log\out.txt" | Out-Null
Remove-Item -Path C:\........\Log\UserLog.txt -Force | Out-Null
Rename-Item -Path "C:\.........\Log\out.txt" -NewName "UserLog.txt" | Out-Null

日志中的行如下所示:

20-09 11:30 ::: 与日志相关的信息行

标签: powershell

解决方案


您可以使用[datetime]::ParseExact()方法将文件日期和时间作为[datetime]对象读取。您可以使用Move-Item-Force参数使用新名称覆盖文件。

$DateOld = (Get-Date).AddDays(-30)

Get-Content UserLog.txt | Where {
    [datetime]::ParseExact([string](-split $_)[0..1],'dd-MM HH:mm', 
    [System.Globalization.DateTimeFormatInfo]::InvariantInfo) -ge $DateOld
} | Set-Content out.txt
Move-Item out.txt UserLog.txt -Force

使用-split value,value基于单个空格分隔符进行拆分。由于我们只需要前两个元素,因此我们0..1对前两个结果元素使用范围。强制转换为[string]使用空格分隔符重新加入拆分项目。


推荐阅读