我需要根据他们的 上次访问 时间删除所有文件(递归地在所有文件夹和子文件夹中)。
我正在查看建议这个答案的 Stack Overflow 帖子 Batch file to delete files older than N days:
forfiles -p "C:\what\ever" -s -m *.* -d <number of days> -c "cmd /c del @path"
但是,这会根据上次修改时间而不是上次访问时间删除文件。
另外,有没有办法将命令保存在脚本文件中,这样我就可以双击它来运行?
最佳答案
使用 Get-ChildItem -recurse
获取所有文件,然后您可以将它们通过管道传输到 where-object
commandlet 以过滤掉目录并使用 LastAccessTime
属性根据该属性进行过滤。然后将结果通过管道传送到执行删除命令的 foreach 对象。
它最终看起来像这样。请注意 Get-Date 的使用,要获取自年初以来更新的所有文件,请替换为您自己的日期:
get-childitem C:\what\ever -recurse | where-object {-not $_.PSIsContainer -and ($_.LastAccessTime -gt (get-date "1/1/2012"))} | foreach-object { del $_ }
或者使用一些常见的别名来缩短一切:
dir C:\what\ever -recurse | ? {-not $_.PSIsContainer -and ($_.LastAccessTime -gt (get-date "1/1/2012"))} | % { del $_ }
关于powershell - 使用 PowerShell 递归删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12378714/