我们有一个程序可以获取特定的XML文件并导入它们,然后将文件从.xml更改为.tmp。一旦转到.tmp,我们就可以删除该文件。
偶尔会发生什么情况,XML文件无法正确导入,在这种情况下,它会从.xml重命名为.bad,并且必须手动调整文件(可能是不正确的xml文件或其他)。我们发现大约90%的时间,如果你将文件重命名为.xml,它导入的很好。
我创建了一个批处理脚本,每隔几分钟运行一次,自动删除.tmp文件。我还想做的是在脚本中添加一些东西,将.bad文件重命名为.xml,以便程序尝试再次导入它。这将覆盖90%。
为了覆盖最后10%,我想设置它以便在大约10分钟后,它不再尝试将文件.bad重命名为.xml(基于创建日期)。< / p>
到目前为止,我所拥有的是删除.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.exe -command "get-childitem 'path\to\xml' -filter *.tmp | Remove-Item"
powershell.exe -command "get-childitem 'path\to\xml' -filter *.bad | where-object {$_.creationtime -gt (get-date).addminutes(-8)} | foreach-object {move-item $_.fullname ($_.fullname-replace '.bad','.xml')}"
答案 0 :(得分:3)
如果选择使用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')}
答案 1 :(得分:1)
假设当文件失败两次时它永远不会成功,那么你可以创建一个跟踪文件(让我们称之为.trk),而不是仅仅将.bad文件重命名为.xml。下次在跟踪剩余的.bad文件之前,删除所有旧的.trk文件和仍然存在的任何匹配的.bad文件(因为这意味着文件失败了两次)。