我有一个包含几乎同名子文件夹的文件夹,我想用 LastWriteTime 按降序删除这些子文件夹,但跳过第一个。并保留第一个具有最新 LastWriteTime 的值。
示例“TestFolder-sep-XXXXXX”
如果我在删除项目上添加-Recurse,我会收到一堆错误“找不到路径‘XXXXXXXXXXXXXX’” 如果我在 get-childitem 和 remove-item 上添加 -Recurse,我不会收到错误,但文件不会被删除。 如果我只有 -Recurse on get-childitem 则不会删除任何文件。
我尝试过 $loc = "C:\Temp*" & $loc = "C:\Temp*"
$loc = "C:\temp"
$Sep = "TestFolder-sep*"
Get-childitem -path $loc -name $Sep | sort LastWriteTime -Descending | Select -Skip 1 | Remove-Item -force
-Filter
,而不是 -Name
。
这将删除
$loc
内的所有子目录,其名称以$Sep
的值开头:
Get-ChildItem -Directory -Path $loc -Filter $Sep | Sort-Object -Property LastWriteTime -Descending | Select-Object -Skip 1 | Remove-Item -Recurse -Force -WhatIf
由于您只需要删除目录,所以我将
-Directory
添加到 Get-ChildItem
,从而自动跳过文件以最大程度地减少意外删除的风险并优化连续命令(在许多文件的情况下特别有用)
然后我确实将
-Recurse
添加到 Remove-Item
,以便跳过确认请求。
-WhatIf
用于查看将删除哪些内容而不实际删除任何内容。