用于根据创建的扩展名和时间重命名和删除文件的Windows批处理脚本

用于根据创建的扩展名和时间重命名和删除文件的Windows批处理脚本,windows,powershell,batch-file,Windows,Powershell,Batch File,我们有一个程序,它获取特定的XML文件并导入它们,然后将文件从.XML更改为.tmp。一旦变成.tmp,我们就可以删除该文件 偶尔会发生的情况是XML文件导入不正确,在这种情况下,它会从.XML重命名为.bad,并且必须手动调整该文件(可能是不正确的XML文件或其他文件)。我们发现,大约90%的情况下,如果将文件重命名回.xml,它可以很好地导入 我创建了一个批处理脚本,每隔几分钟运行一次,自动删除.tmp文件。我还想做的是在脚本中添加一些东西,将.bad文件重命名为.xml,以便让程序再次尝试

我们有一个程序,它获取特定的XML文件并导入它们,然后将文件从.XML更改为.tmp。一旦变成.tmp,我们就可以删除该文件

偶尔会发生的情况是XML文件导入不正确,在这种情况下,它会从.XML重命名为.bad,并且必须手动调整该文件(可能是不正确的XML文件或其他文件)。我们发现,大约90%的情况下,如果将文件重命名回.xml,它可以很好地导入

我创建了一个批处理脚本,每隔几分钟运行一次,自动删除.tmp文件。我还想做的是在脚本中添加一些东西,将.bad文件重命名为.xml,以便让程序再次尝试导入它。这将涵盖90%

为了涵盖最后10%,我想对其进行设置,以便在大约10分钟后,它不再尝试将文件.bad重命名为.xml(基于创建日期)

到目前为止,我拥有的是删除.tmp文件的脚本:

forfiles -p "C:\path\to\xml" -m *.tmp -c "cmd /c del @PATH"
我有脚本要重命名.bad为.xml:

forfiles -p "C:\path\to\xml" -m *.bad -c "cmd /c ren *.bad *.xml"
如何告诉第二个命令仅对创建日期(不是上次修改日期)小于10分钟的文件执行此操作

更新:

以下是完整的解决方案(感谢jon Z为我指明了正确的方向):


如果选择使用powershell而不是cmd,则可以执行以下操作:

要删除这些文件,请执行以下操作:

get-childitem c:\path\to\xml -filter *.tmp | remove-item
将.bad重命名为.xml

get-childitem c:\path\to\xml -filter *.bad |  where-object {$_.creationtime -gt (get-date).addminutes(-10)} | foreach-object {move-item $_.fullname ($_.fullname -replace '.bad','.xml')}

如果选择使用powershell而不是cmd,则可以执行以下操作:

要删除这些文件,请执行以下操作:

get-childitem c:\path\to\xml -filter *.tmp | remove-item
将.bad重命名为.xml

get-childitem c:\path\to\xml -filter *.bad |  where-object {$_.creationtime -gt (get-date).addminutes(-10)} | foreach-object {move-item $_.fullname ($_.fullname -replace '.bad','.xml')}

假设一个文件失败两次就永远不会成功,那么您可以创建一个跟踪文件(我们称之为.trk),而不是将.bad文件重命名为.xml。下次在跟踪剩余的.bad文件之前,删除所有旧的.trk文件和仍然存在的任何匹配的.bad文件(因为这意味着该文件失败两次)。

假设一个文件失败两次,它将永远不会成功,那么您可以创建一个跟踪文件,而不只是将.bad文件重命名为.xml(我们称之为.trk)。下次删除所有旧的.trk文件和仍然存在的任何匹配的.bad文件(因为这意味着该文件失败了两次)在跟踪剩余的.bad文件之前。

修复导入是不可能的?我认为最好是更正问题,而不是绕过它。如果有一种自动方法来修复导入的文件,那会更好。不幸的是,没有,因为这可能是许多不同问题的结果。我们必须检查并修复文件一年一次。修复导入是不可能的?我认为最好是纠正问题,而不是绕过它。如果有一种自动方法来修复导入的文件,那会更好。不幸的是,没有,因为这可能是许多不同问题的结果。我们必须手动检查和修复文件。