Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PowerShell,如何将文件创建/拆分为1周的块?_Powershell - Fatal编程技术网

使用PowerShell,如何将文件创建/拆分为1周的块?

使用PowerShell,如何将文件创建/拆分为1周的块?,powershell,Powershell,这是关于这里的帖子: 使用下面的代码(由“mjolinor”提供),我可以获取一个单片(管道“|”分隔)CSV文件,并创建一个仅包含日期小于$date的行的修剪CSV文件: $date = '09/29/2011' foreach ($file in gci *.csv) { (gc $file) | ? {[datetime]$_.split('|')[1] -lt $date } | set-content $file } 上面的代码非常有效!我现在需要做的是

这是关于这里的帖子:

使用下面的代码(由“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
开始的1周内的块

例如,我需要以下“修剪”的CSV文件(所有文件都是从原始CSV创建的):

  • 2011年9月30日之前的所有日期(已使用上述代码完成)
  • 日期范围为09/30-10/6的文件
  • 日期范围为10/7-10/14的文件
  • 等等,等等,直到我到达最近的日期
    • 您可以使用这样的方法

      $date = (Get-Date)
      $di = [Globalization.DateTimeFormatInfo]::CurrentInfo
      $week = $di.Calendar.GetWeekOfYear($date, $di.CalendarWeekRule, $di.FirstDayOfWeek)
      
      确定给定日期的周数。

      您可以使用以下方法

      $date = (Get-Date)
      $di = [Globalization.DateTimeFormatInfo]::CurrentInfo
      $week = $di.Calendar.GetWeekOfYear($date, $di.CalendarWeekRule, $di.FirstDayOfWeek)
      

      确定给定日期的周数。

      这不是用您的输入测试的(它是根据我用于时间切片和计算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
         }
      

      这并没有用您的输入进行测试(它是根据我用于时间切片和计算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
         }
      
      乔利纳——谢谢你!我会玩弄你的代码,看看能不能让它为我工作。mjolinor--谢谢!我会玩弄你的代码,看看能不能让它为我工作。