我正在编写一个PowerShell脚本,删除除最近X文件夹以外的所有文件夹,不包括名为Data的文件夹。我的发言来收集中删除文件夹看起来像这样:PowerShell Get-ChildItem和跳过
$folders1 = Get-ChildItem $parentFolderName |
? { $_.PSIsContainer -and $_.Name -ne "Data" } |
sort CreationTime -desc |
select -Skip $numberOfFoldersToKeep
foreach ($objItem in $folders1) {
Write-Host $webServerLocation\$objItem
Remove-Item -Recurse -Force $parentFolderName\$objItem -WhatIf
}
当我通过一个$numberOfFoldersToKeep
比在起始目录$parentFolderName
文件夹的数量少这个伟大的工程。例如,在我的目标文件夹5个子目录,这样按预期工作:
myScript.ps1 C:\StartingFolder 3
但如果我通过大量的文件夹跳过的,我的发言似乎返回的$parentFolderName
本身的价值!所以这是行不通的:
myScript.ps1 C:\StartingFolder 15
因为跳过变量超过Get-ChildItem
集合中的项目数量,脚本试图删除C:\StartingFolder\
这是不是我所期待的。
我在做什么错?
为什么不把你的foreach放在IF语句中:'if($ folder1 -neq $ null){...} ...'或者干脆用'remove-item $ objectItem.fullname' –
我不能重现这个。如果我将'$ numberOfFoldersToKeep'传入的数字大于'gci'的结果,我会返回'$ null'(因此'foreach'甚至不会被执行),这是正是我期望的。 – alroc
@alroc看看他如何删除文件;) –