我需要根据上次访问时间删除所有文件(递归地在所有文件夹和子文件夹中)。
我正在查看 Stack Overflow 发布的批处理文件以删除超过 N 天的建议此答案的文件:
forfiles -p "C:\what\ever" -s -m *.* -d <number of days> -c "cmd /c del @path"
但是,这会根据上次修改时间而不是上次访问时间删除文件。
另外,有没有办法将命令保存在脚本文件中,这样我就可以双击它来运行?
我需要根据上次访问时间删除所有文件(递归地在所有文件夹和子文件夹中)。
我正在查看 Stack Overflow 发布的批处理文件以删除超过 N 天的建议此答案的文件:
forfiles -p "C:\what\ever" -s -m *.* -d <number of days> -c "cmd /c del @path"
但是,这会根据上次修改时间而不是上次访问时间删除文件。
另外,有没有办法将命令保存在脚本文件中,这样我就可以双击它来运行?
用于Get-ChildItem -recurse
获取所有文件,然后您可以将它们通过管道传送到where-object
命令行开关以过滤掉目录并使用LastAccessTime
属性根据该属性进行过滤。然后将结果通过管道传递给执行删除命令的 foreach-object。
它最终看起来像这样。注意 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 3.0 中执行相同操作(仅获取文件)的方式:
$old = Get-Date "1/1/2012"
Get-ChildItem C:\what\ever -File -Recurse |
Where-Object {$_.LastAccessTime -gt $old} |
Remove-Item -Force