powershell - 保留最近的 n 个文件并删除其余文件
问题描述
$path = "D:\AccountServiceQAT"
$Temp = "D:\\temp1"
$limit = (Get-Date).Adddays(-5)
$Folder = Get-ChildItem $path | Where {$_.PSIsContainer} | Sort CreationTime -Descending | Select -First 5
$Folder | Copy-Item -Recurse -Destination $Temp
Remove-Item $path\* -Recurse
Move-Item $Temp\* -Destination $path
Remove-Item $Temp\* -Recurse
如何在不使用 Temp 变量的情况下修改上述脚本以维护最新的 5 个时间戳文件夹并删除剩余的所有文件夹?
解决方案
这对你有用。为了便于阅读,第二个命令是多行的,但它也可以在单行上运行:
$path = "D:\AccountServiceQAT"
Get-ChildItem -Directory $path | Sort-Object CreationTime |
Select-Object -SkipLast 5 | Remove-Item -Recurse -WhatIf
警告:我不会在真实数据上进行测试。使用虚拟测试文件夹来测试上述内容。
让我们分解一下:
Get-ChildItem -Directory
只列出目录。从技术上讲是容器,但除非您与其他提供商合作,否则您无需担心这一点。在文件系统上,“容器”指的是文件夹。Sort-Object CreationTime
CreationTime
按从 传递下来的属性对返回的列表进行排序Get-ChildItem
。- 默认情况下
Sort-Object
按升序排序。您可以使用参数更改它-Descending
。
- 默认情况下
Select-Object -SkipLast 5
跳过管道中返回的最后 5 个对象。换句话说,它把它们扔掉了。这应该是您最近的 5 个文件夹。- 如果您要使用
Sort-Object -Descending
,则需要-Skip 5
改为跳过前5 个对象。
- 如果您要使用
Remove-Item
接受要删除的项目的管道输入。这与从 返回的对象兼容Get-ChildItem
。-Recurse
告诉Remove-Item
递归删除非空文件夹。如果没有这个,它将要求您确认删除任何具有子对象(文件或文件夹)的文件夹。您不希望在自动化中这样做。-WhatIf
用于在Remove-Item
不实际删除文件的情况下进行测试。它将显示如下输出:What if: Performing the operation "Remove Directory" on target "C:\Users\username\Desktop". What if: Performing the operation "Remove Directory" on target "C:\Users\username\Downloads". What if: Performing the operation "Remove Directory" on target "C:\Users\username\Favorites". What if: Performing the operation "Remove Directory" on target "C:\Users\username\Links".
当您对要删除的文件集感到满意时,请替换
-WhatIf
为-Force
.-Force
不会提示删除只读项,Remove-Item
默认会提示你。
推荐阅读
- python - 如何等待我的 python 函数的返回以及如何使用我的控制器 nodejs 在我的响应正文中返回数据?
- node.js - 无论如何在运行 docker 映像时配置服务器 URL?(而不是应用程序中的硬编码)
- python - 如何检查用户输入的年份是否有效?
- laravel - Laravel 在 ViewServiceProvider 上多次查询
- tableau-api - 如何修复仪表板的形状,尤其是。它的零件?
- python - 用户单击botframework聊天机器人中的按钮后,如何聊天窗口显示所选值?
- postgresql - 对于表中的所有字符串 s1 将所有子字符串 s2 更改为子字符串 s3
- google-console-developer - 如何使用谷歌控制台修复测试版错误
- jquery - 由于 datatime2 和外键异常,我在使用 ajax 保存数据时遇到了一些问题
- r - 如何将日期和时间分成两列