如何在Powershell中删除文件夹并将其内容移动到父文件夹?

时间:2018-12-28 16:53:30

标签: powershell

我从网站上下载了很多图标,其下载结构为:pack/svg/icons,但是这种冗余结构对我的项目而言并不理想。我只想将图标直接放在pack目录下。所以现在是这样:

 Categorized Icons
  └ RandomCat1
      └ svg
          └ icon1.svg
          └ icon2.svg
   └ RandomCat2
      └ svg
          └ moreicons.svg
          └ alldifferentnames.svg

以及我想要的方式:

 Categorized Icons
  └ RandomCat
      └ icon1.svg
      └ icon2.svg

问题是我不知道RandomCat的名称,并且我不想为每个可能的文件夹运行此命令。我需要类似“将所有图标移至../,删除/ svg /”之类的东西。

1 个答案:

答案 0 :(得分:3)

首先枚举基本目录下所有名为“ svg”的目录。返回的DirectoryInfo对象可用于访问文件夹内容。它们还具有引用其父文件夹对象的属性Parent。将后者用作移动前者的目标。然后删除源文件夹。

Get-ChildItem 'C:\folder' -Filter 'svg' -Directory -Recurse -Force | ForEach-Object {
    Move-Item "$($_.FullName)\*.svg" -Destination $_.Parent.FullName
    Remove-Item $_.FullName -Force
}

请注意,在v3之前的PowerShell版本Get-ChildItem中没有参数-Directory。如果您只能使用过时的版本,则需要使用类似的方法枚举“ svg”文件夹:

Get-ChildItem 'C:\folder' -Filter 'svg' -Recurse -Force | Where-Object {
    $_.PSIsContainer
} | ...