windows - Powershell脚本以递归方式删除每个文件夹中的文件,除了最近写入时间的10个文件夹
问题描述
我想写一个脚本作为标题。我在递归地做这件事上遇到了麻烦,所以我试着在参数中传递路径。问题是,当我将 1 个参数传递给脚本时,它可以正常工作,但是当我开始传递更多参数时,它不会跳过下一个文件夹中的 10 个文件,它只会跳过第一个文件夹中的正确数量的文件。如果有人可以帮助递归地执行此操作并仅将路径传递给父目录或仅单独传递每个路径,我会很高兴。这是我的代码,它仅适用于第一个传递的参数。
Param(
[string[]]$path
)
Get-ChildItem $path |
#skip directories
Where-Object { -not $_.PsIsContainer } |
#Sort by last write time
Sort-Object -Descending -Property LastWriteTime |
#Skip 10 most recent
Select-Object -Skip 10 |
Remove-Item -whatif
解决方案
由于您将整个数组传递给 Get-ChildItem,因此它将通过管道将所有目录中的所有文件一次性排序。尝试将整个管道包裹在 foreach 中。
foreach($item in $path){
Get-ChildItem $item |
Where-Object { -not $_.PsIsContainer } |
Sort-Object -Descending -Property LastWriteTime |
Select-Object -Skip 10 | Remove-Item -whatif
}
推荐阅读
- vba - 如何修复对象“_AppointmentItem”的方法“位置”失败错误?
- .net - 如何使用变量创建动态事件
- python - setup.py 安装本地包
- xml - 使用超出页面大小的 XSLT 在 PDF 中包装表格
- javascript - 在 Gulp AngularJS 应用程序中实现谷歌翻译
- java - log4j appender 仅将我的消息发送到 stdout,但不发送远程 GELF appender
- arrays - 搜索和过滤列表列表
- javascript - getUserMedia 图像捕获分辨率与 html 视频元素大小
- php - 将 jalali 日期转换为公历的问题
- java - Maven 清理命令:java.util.Collections.UnmodifiableRandomAccessList 到 java.util.ArrayList 类型的属性