我有一个名为HelplineSpecialRoster.txt的文本文件,看起来像这样
01/01/2019,6AM,0400012345,Kurt,kurt@outlook.com
02/01/2019,6AM,0412345676,Bill,bill@outlook.com
03/01/2019,6AM,0400012345,Sam,Sam@outlook.com
04/01/2019,6AM,0412345676,Barry,barry@outlook.com
05/01/2019,6AM,0400012345,Kurt,kurt@outlook.com
我在澳大利亚,所以日期是日/月/年。
我有一些代码可以创建一个列表框,以显示文本文件中的行,但是我想在文本文件显示之前只对其显示较早的日期进行编辑。一个乐于助人的人给了我这段代码,它曾经工作过一次,但由于某种原因现在停止工作了。当我删除整个文本文件并重新创建它时,它再次开始工作,但只有一次。
如果文件中将来有更改,请说
05/02/2019,6AM,0400012345,Kurt,kurt@outlook.com
,今天是29/01/2019,它可以删除以前的班次。如果文件中只有上述旧班次,则不会删除它们。当我添加一个将来的日期时,它将删除较旧的日期,只保留将来的日期。
$SpecialRosterPath = "C:\Helpline Dialer\HelplineSpecialRoster.txt"
$CurrentDate2 = (Get-Date).Date # to have a datetime starting today at 00:00:00
Function DeleteOlderShifts {
$CurrentAndFutureShifts = Get-Content $SpecialRosterPath | Where-Object {
$_ -match "^(?<day>\d{2})\/(?<mon>\d{2})\/(?<year>\d{4})" -and
(Get-Date -Year $Matches.year -Month $Matches.mon -Day $Matches.day) -ge $CurrentDate2
}
$CurrentAndFutureShifts
$CurrentAndFutureShifts | Set-Content $SpecialRosterPath
}
DeleteOlderShifts;
有什么想法吗?
答案 0 :(得分:1)
当输入文件中只有较早的日期时,$CurrentAndFutureShifts
中的结果将为空。跳过管道中的空值,这意味着没有任何内容写入输出文件,因此输出文件保持不变。
您可以通过将变量传递给参数-Value
来避免此问题。更改
$CurrentAndFutureShifts | Set-Content $SpecialRosterPath
进入
Set-Content -Value $CurrentAndFutureShifts -Path $SpecialRosterPath
答案 1 :(得分:0)
使用带标题的CSV文件而不是使用文本文件。本质上,这只是一个保存为.csv文件扩展名的文本文件,该文件扩展名包括每列的标题:
请注意,我在底部添加了一个额外的行,该行的日期早于今天以证明测试。
HelpineSpecialRoster.csv内容:
Date,Time,Number,Name,Email
01/01/2019,6AM,400012345,Kurt,kurt@outlook.com
02/01/2019,6AM,412345676,Bill,bill@outlook.com
03/01/2019,6AM,400012345,Sam,Sam@outlook.com
04/01/2019,6AM,412345676,Barry,barry@outlook.com
05/01/2019,6AM,400012345,Kurt,kurt@outlook.com
01/02/2019,6AM,400012345,Dan,dan@outlook.com
设置CSV的路径:
$csvPath = "C:\HelpineSpecialRoster.csv"
从文件导入CSV:
$csvData = Import-CSV $csvPath
在00:00获取今天的日期
$date = (Get-Date).Date
过滤csv数据以显示日期早于当前日期的行:
$csvData = $csvData | ? { (Get-Date $date) -lt (Get-Date $_.Date) }
将CSV数据导出回原始CSV:
$csvData | Export-CSV $csvPath -Force