使用PowerShell递归删除文件

rob*_*ert 4 powershell windows-server-2008

我需要根据上次访问时间删除所有文件(在所有文件夹和子文件夹中递归).

我正在查看Stack Overflow post Batch文件,删除超过N天的文件,建议这个答案:

forfiles -p "C:\what\ever" -s -m *.* -d <number of days> -c "cmd /c del @path"
Run Code Online (Sandbox Code Playgroud)

但是,这会根据上次修改时间而不是上次访问时间删除文件.

还有,有没有办法将命令保存在脚本文件中,所以我可以双击它来运行?

zda*_*dan 7

使用Get-ChildItem -recurse得到的所有文件,然后你可以管他们的where-object命令行过滤掉的目录和使用LastAccessTime属性基于该属性进行过滤.然后将结果传递给执行delete命令的foreach对象.

它最终看起来像这样.注意使用Get-Date来获取自年初以来更新的所有文件,替换为您自己的日期:

get-childitem C:\what\ever -recurse | where-object {-not $_.PSIsContainer -and ($_.LastAccessTime -gt (get-date "1/1/2012"))} | foreach-object { del $_ }
Run Code Online (Sandbox Code Playgroud)

或者使用一些常见的别名来缩短所有内容:

dir C:\what\ever -recurse | ? {-not $_.PSIsContainer -and ($_.LastAccessTime -gt (get-date "1/1/2012"))} | % { del $_ }
Run Code Online (Sandbox Code Playgroud)

  • 我想补充一点,如果你正在寻找7天大的东西,你可以使用`(Get-Date).AddDays(-7)`做一个更多变量的日期. (2认同)