我正在尝试制作批处理文件,并且不知道从哪里开始。我需要一个批处理文件,它从文件中读取文本并将写入的日期与今天的日期进行比较,如果它们相隔超过30天,那么它将使用下一行代码删除该日期行。如下例所示。
15年6月1日
阿尔伯特
15年6月15日
罗杰
15年7月3日
史蒂夫
15年5月6日
BOB
如果文件运行的那天是7/5/15,则文本文件看起来像
15年6月15日
罗杰
15年7月3日
史蒂夫
感谢任何人提供的任何帮助。
答案 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。