批处理文件,用于在特定日期删除文本

时间:2015-06-29 16:48:04

标签: batch-file

我正在尝试制作批处理文件,并且不知道从哪里开始。我需要一个批处理文件,它从文件中读取文本并将写入的日期与今天的日期进行比较,如果它们相隔超过30天,那么它将使用下一行代码删除该日期行。如下例所示。

  

15年6月1日
  阿尔伯特
  15年6月15日
  罗杰
  15年7月3日
  史蒂夫
  15年5月6日
  BOB

如果文件运行的那天是7/5/15,则文本文件看起来像

  

15年6月15日
  罗杰
  15年7月3日
  史蒂夫

感谢任何人提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

批处理中的日期/时间数学是可能的,但是很麻烦,我建议使用更高级别的语言来解决这个问题。这是一些解决您问题的PowerShell。

$foundDateToRemove = $false
$date = [datetime]::Now
Get-Content 'input.txt' | foreach {
    if ([datetime]::TryParse($_, [ref]$date)) {
        # Line is a date.  Remove it if it's more than 30 days old
        if ($date.AddDays(30).CompareTo([datetime]::Now) -lt 0) {
            $foundDateToRemove = $true
        }
        else {
            # Date still current; output line
            $_
        }
    }
    elseif ( $foundDateToRemove ) {
        # This is the line after the removed date
        $foundDateToRemove = $false
    }
    else {
        # This is any other line in the file.  Output it for good measure.
        $_
    }
} | Out-File 'output.txt'

此脚本打开一个名为input.txt的文件并写入output.txt。如果您想要在运行后进行覆盖行为copy output.txt input.txt

您的某些日期示例含糊不清。例如," 6/1/15"可能是1月6日,也可能是6月1日。该脚本将使用您计算机的本地文化格式解析日期,在您的情况下,我假设为M/d/yy。如果需要优化该格式,请修改脚本以将格式参数传递给TryParse

此外,根据文件的编码,您可能需要将-Encoding参数传递给Out-File。默认值为system ANSI。