Batch file 批处理文件以在特定日期删除文本
我正在尝试创建一个批处理文件,但不知道从哪里开始。我需要一个批处理文件,从文件中读取文本,并将写入的日期与今天的日期进行比较,如果它们相隔超过30天,则它将删除该日期行和下一行代码。如下例所示 2015年6月1日Batch file 批处理文件以在特定日期删除文本,batch-file,Batch File,我正在尝试创建一个批处理文件,但不知道从哪里开始。我需要一个批处理文件,从文件中读取文本,并将写入的日期与今天的日期进行比较,如果它们相隔超过30天,则它将删除该日期行和下一行代码。如下例所示 2015年6月1日 阿尔伯特 2015年6月15日 罗杰 2015年7月3日 史蒂夫 2015年5月6日 鲍勃 如果文件运行的日期是2015年7月5日,那么文本文件将如下所示 2015年6月15日 罗杰 2015年7月3日 史蒂夫 感谢任何人提供的帮助。批量计算日期/时间是可能的,但很麻烦,我建议使用更高
阿尔伯特
2015年6月15日
罗杰
2015年7月3日
史蒂夫
2015年5月6日
鲍勃 如果文件运行的日期是2015年7月5日,那么文本文件将如下所示 2015年6月15日
罗杰
2015年7月3日
史蒂夫
感谢任何人提供的帮助。批量计算日期/时间是可能的,但很麻烦,我建议使用更高级的语言来解决这个问题。下面是一些解决您问题的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
。如果要覆盖行为,请在运行后复制output.txt input.txt
你的一些约会例子模棱两可。例如,“6/1/15”可能是1月6日,也可能是6月1日。脚本将使用您计算机的本地区域性格式解析日期,在您的情况下,我假定该格式为M/d/yy
。如果需要优化该格式,请修改脚本以将格式参数传递给
此外,根据文件的编码,您可能需要将
-encoding
参数传递到输出文件
。默认值为系统ANSI。日期/时间数学可以成批计算,但很混乱。你会考虑一个VBScript或Pux壳解决方案吗?只要它是可以自动运行的任何解决方案,对我来说都是很棒的。