大家好,我有需要删除90天以前的旧文件的脚本。对于90天脚本来说,问题没有时间计算可以正常工作。如果我们在检查时间范围的条件时添加条件:90天无法正常工作。
我有一个特定的文件夹,其中包含脚本下面的子文件夹,而不是删除子文件夹脚本下的文件的子文件夹,而仅指定删除其子文件夹文件的文件夹。
我们有要求的Power Shell脚本,该脚本应删除90天之前的文件,并且还应删除子文件夹下的文件。
任何人都可以建议对以下脚本进行任何更改
Get-ChildItem -Path "D:\samples\" -Include *.* -Recurse -Force | where CreationTime -lt (Get-Date).AddDays(-10) | foreach {$_.Delete()}
答案 0 :(得分:1)
您的| where
需要大括号{}
。 $_
引用该对象。使用该代码,您的代码将如下所示:
Get-ChildItem -Path "D:\samples\" -file -Recurse -Force | where {$_.CreationTime -lt (Get-Date).AddDays(-10)} | foreach {$_.Delete()}
注意:我将-Include "."
替换为-file
以包括所有文件。这至少需要Powershell 3.0版。使用$Host
答案 1 :(得分:0)
您使用的几个Powershell标签(通常相互排斥)含糊不清,
如果要确保脚本可在PSv2下运行,请仅使用该标记。
Remove-Item
cmdlet直接接受管道输入,因此我将使用它代替ForEach-Object和对象.delete()
方法。
-File
参数需要PSv3 +,替代方法是检查(not = {!
)$_.PSIsContainer
该脚本使IMO更易于阅读,其中PowerShell希望延续和缩进的折线如下:
## Q:\Test\2019\01\22\SO_54311383.ps1
$BasePath = "D:\samples\*"
$Treshold = (Get-Date).Date.AddDays(-10)
Get-ChildItem -Path $BasePath -Recurse -Force |
Where-Object {!$_.PSIsContainer -and
$_.CreationTime -lt $Treshold} |
Remove-Item -WhatIf # -Force
如果输出看起来正常,请删除最后一行中的-WhatIf
。
暂时将最终必要的-Force
参数注释掉了。