这是参考此处的帖子:How to delete date-based lines from files using PowerShell
使用下面的代码(由'mjolinor'提供)我可以采用单片(管道“|”分隔)CSV文件,并创建一个仅包含日期小于$date
的行的修剪CSV文件:
$date = '09/29/2011'
foreach ($file in gci *.csv) {
(gc $file) |
? {[datetime]$_.split('|')[1] -lt $date
} | set-content $file
}
以上代码效果很好!我现在需要做的是从单片CSV文件创建其他CSV文件,其中的行包含日期>= $date
,每个文件需要在$date
前后的一周内完成。
例如,我需要以下“修剪过的”CSV文件(全部由原始CSV创建):
答案 0 :(得分:3)
您可以使用GetWeekOfYear
这样的Calendar
方法
$date = (Get-Date)
$di = [Globalization.DateTimeFormatInfo]::CurrentInfo
$week = $di.Calendar.GetWeekOfYear($date, $di.CalendarWeekRule, $di.FirstDayOfWeek)
确定给定日期的周数。
答案 1 :(得分:2)
这不是使用您的输入进行测试的(它是根据我用于时间切片和计算Windows日志事件的一些脚本改编而来的),但应该接近工作。它可以在$ span中指定的任意时间范围内创建文件:
$StartString = '09/29/2011'
$inputfile = 'c:\somedir\somefile.csv'
$Span = new-timespan -days 7
$lines = @{}
$TimeBase = [DateTime]::MinValue
$StartTicks = ([datetime]$startString).Ticks
$SpanTicks = $Span.Ticks
get-content $inputfile |
foreach {
$dt = [datetime]$_.split('|')[1]
$Time_Slice = [int][math]::truncate(($dt.Ticks - $StartTicks) / $SpanTicks)
$lines[$Time_Slice] += @($_)
}
$lines.GetEnumerator() |
foreach {
$filename = ([datetime]$StartString + [TimeSpan]::FromTicks($SpanTicks * $_.Name)).tostring("yyyyMMdd") + '.csv'
$_.value | export -csv $filename
}