powershell - 如何使用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 ::: 与日志相关的信息行
解决方案
您可以使用[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]
使用空格分隔符重新加入拆分项目。
推荐阅读
- sql - #符号之间的PLSql变量
- python - Keras,只有一张图像的人脸检测
- c# - Xamarin Android:如何创建组合框
- highcharts - Higcharts - 如何从图表的开头删除 groupPadding
- xml - 数据中的列与范围中的列数不匹配(数据有 12 但范围有 11)
- node-red - NodeRED 使 CTRL+S 导致“完成”按钮单击
- c# - 如何在没有存储过程的情况下获取更新的行主键
- drools - 如何“启动条件”进程jbpm7?
- excel - 当两者都在同一个工作簿中指定不同的工作表时,我可以将一个 With 嵌套在一个 With 中吗?VBA
- rest - VPN encrpyt Restful 连接吗?