Powershell比较几个月并排除不需要的月份

时间:2015-07-29 06:36:06

标签: powershell

我有一个文本文件,如下所示。我需要保存6个月之内(从上个月开始)的文件,并将所有其他内容写入超过6个月的其他文件。

到目前为止,我所做的是:

$array3 = 
do {      
    foreach($monthl in $monthlookup)
    {
     $mnthl = $monthl -split '-'
     $m_day = $mnthl[1]
     $m_month = $mnthl[2]
     $m_year = $mnthl[3]
     $m_temp = 0
     $prevmonth = (Get-Date).AddMonths(-1).ToString("dd-MM-yy")
     while(($m_temp -eq "0"))
     {
      if(($m_month -ge $startmonth) -and ($m_month -le $prevmonth))
        {
         $monthl | Add-Content "C:\each_month_latest.txt"
         break;
        }else
        {    
         $monthl | Add-Content "C:\exclusions.txt"
        }
       }      
      }
  } until ($m_month -ge $m)

我在这里确定的问题是:如果当前月份是1,那么它将不会回到最近6个月并检查,因为我在这里只使用字符串。

任何建议或代码改进,你们中的任何人都可以想到......?真的很感激。

修改 monthlookup看起来像:

testdatabase-30-11-14-23-00
testdatabase-31-12-14-23-00
testdatabase-30-01-15-23-00
testdatabase-31-01-15-23-00
testdatabase-27-05-15-23-00
testdatabase-28-02-15-23-00
testdatabase-31-03-15-23-00
testdatabase-30-04-15-23-00
testdatabase-31-05-15-23-00

$ m是$m = Get-Date -Format "MM"

1 个答案:

答案 0 :(得分:2)

好吧,我并不完全明白你想做什么,但这里有些蠢事:

    每次在foreach循环中都不应该
  1. $prevmonth = (Get-Date).AddMonths(-1).ToString("dd-MM-yy")
  2. 您可以使用简单的正则表达式提取日期:[regex]::Match('testdatabase-30-11-14-23-00', '^.*?-(\d{2}-\d{2}-\d{2}-\d{2}-\d{2}$)').Groups[1].Value
  3. 使用[datetime]::ParseExact和格式字符串
  4. 解析日期

    所以看起来像这样:

    # this doesn't have to be done each time in the foreach loop
    $sixMonthBefore = (Get-Date).AddMonths(-6)
    
    foreach($monthl in $monthlookup)
    {
        # extract the date
        $dateString = [regex]::Match($monthl, '^.*?-(\d{2}-\d{2}-\d{2}-\d{2}-\d{2}$)').Groups[1].Value
    
        # create a datetime using format string
        $date = [datetime]::ParseExact($dateString, 'dd-MM-yy-HH-mm', $null)
    
        if ($date.Month -eq (Get-Date).Month -and $date.Year -eq (Get-Date).Year)
        {
            Write-Host "$monthl is from this month"
        }
        elseif ($date -gt $sixMonthBefore)
        {
            $monthl | Add-Content "C:\each_month_latest.txt"
        }
        else
        {
            $monthl | Add-Content "C:\exclusions.txt"
        }    
    }