Powershell命令删除子文件夹而不删除根

时间:2017-02-08 11:01:09

标签: powershell root directory

我在创建PS命令时遇到问题,该命令允许我删除多个子文件夹而不删除屋顶文件夹。

即:

C:\ Test有很多子文件夹:

  • C:\测试\项目1
  • C:\测试\项目2
  • C:\测试\项目3

文件夹Item1,Item2和Item3有很多子文件夹和文件。

我想创建一个PS,允许我删除Item1,Item2和Item3中的所有空子文件夹而不删除Item1,Item2和Item3文件夹。任何Item文件夹都可能是空的,但我不想删除它们,只是每个文件夹的空内容。

这只是一个例子,我在Test中有大约300个Item文件夹。

我通常会用这个:

$路径=" C:\ TEST"

 do {

       $dir = gci $path -directory -recurse | Where { (gci $_.fullName).count -eq 0 } | select -expandproperty FullName

       $dir | Foreach-Object { Remove-Item $_ }

    } while ($dir.count -gt 0)

但如果它们为空,则会删除文件夹根文件夹(Item1,Item2或Item3)。

提前致谢。

1 个答案:

答案 0 :(得分:14)

那么您是要删除空子文件夹中的所有项目还是常规中的所有项目?

这将删除目录“C:\ abc \”

内的所有文件夹或项目
man sort

这将删除所有没有任何项目的文件夹。

$path = "C:\abc\"
Get-ChildItem -Path $path -Recurse| Foreach-object {Remove-item -Recurse -path $_.FullName }

“ 这将在里面查看“C:\ abc \”获取所有子节点并删除示例中子节点内的所有空目录,这将是Item1,Item2,......

$path = "C:\abc\"
Get-ChildItem -Path $path -Recurse | Where-Object {(Get-ChildItem $_.FullName).Count -eq 0} |Foreach-object {Remove-item -Recurse -path $_.FullName }

因为我没有太多时间,所以只是快速而肮脏的代码,希望我可以提供帮助。

编辑:这是我提出的,它不像我想的那样高效,但它完成工作并且相当快,为自己试一试它对我有用 - 甚至提出了几条评论并输出以澄清正在发生的事情。

$Path = "C:\abc\"
$itemFolders= Get-ChildItem -Path $Path
$itemFolders| Foreach-Object {
    Get-ChildItem -Path $_.FullName |
    Where-Object {(Get-ChildItem $_.FullName).Count -eq 0} | 
    Foreach-object {Remove-item -Recurse -path $_.FullName }
}