问题描述
One;Thomas;Newyork;2020-12-31 14:00:00;0
Two;David;London;2021-01-31 12:00:00;0
Three;James;Chicago;2021-01-20 15:00:00;0
Four;Edward;India;2020-12-25 15:00:00;0
在这些按日期时间排列的条目中,两个是过去的条目,两个是未来的条目。字符串中的最后一个 0 表示标志。对于过去的条目,该标志需要更改为 1。
考虑到所有条目都用数组分隔。我尝试了这段代码,但无法解决这里的问题。
for ($item=0 ; $item -lt $entries.count ; $item++)
{
if ($entries.DateTime[$item] -lt (Get-Date -Format "yyyy-MM-dd HH:mm:ss"))
{
$cont = Get-Content $entries -ErrorAction Stop
$string = $entries.number[$item] + ";" + $entries.name[$item] + ";" +
$entries.city[$item]+ ";" + $entries.DateTime[$item]
$lineNum = $cont | Select-String $string
$line = $lineNum.LineNumber + 1
$cont[$line] = $string + ";1"
Set-Content -path $entries
}
}
输出应为:-
One;Thomas;Newyork;2020-12-31 14:00:00;1((相对于当前日期的过去部署)
二;大卫;伦敦;2021-01-31 12:00:00;0
三;詹姆斯;芝加哥;2021-01-20 15:00:00;0
四;爱德华;印度;2020-12-25 15:00:00;1(过去部署相对于当前日期)
需要在提取内容的文件(即 Entries.txt)上覆盖此输出
解决方法
param(
$exampleFileName = "d:\tmp\file.txt"
)
@"
One;Thomas;Newyork;2020-12-31 14:00:00;0
Two;David;London;2021-01-31 12:00:00;0
Three;James;Chicago;2021-01-20 15:00:00;0
Four;Edward;India;2020-12-25 15:00:00;0
"@ | Out-File $exampleFileName
Remove-Variable out -ErrorAction SilentlyContinue
Get-Content $exampleFileName | ForEach-Object {
$out += ($_ -and [datetime]::Parse(($_ -split ";")[3]) -gt [datetime]::Now) ? $_.SubString(0,$_.Length-1) + "1`r`n" : $_ + "`r`n"
}
Out-File -InputObject $out -FilePath $exampleFileName