将文件夹移到父文件夹并附加父名称

时间:2019-06-07 22:21:33

标签: powershell

我有遵循以下模式的文件夹:

C:\
└───root
    ├───V16
    │   ├───1
    │   │       A.sql
    │   │       B.sql
    │   │
    │   ├───2
    │   │       C.sql
    │   │
    │   └───4
    │           E.sql
    │
    └───V17
        └───1
                D.sql

我的目标是获得这种模式:

C:\root\V16-1\A.sql
C:\root\V16-1\B.sql
C:\root\V16-2\C.sql
C:\root\V17-1\D.sql
C:\root\V17-4\E.sql

我完全知道如何在C#中做到这一点,但不幸的是,我真的是Powershell中的新手

2 个答案:

答案 0 :(得分:1)

尝试

$DirToRemove=@()

Get-ChildItem "C:\temp\root\*\*" -directory | %{
    move-Item $_.FullName ($_.Parent.FullName + '-' + $_.Name)
    $DirToRemove+=$_.Parent.FullName
}

$DirToRemove | select -Unique | Remove-Item

答案 1 :(得分:0)

移动文件夹时,*。sql文件无关。

Get-ChildItem C:\root\*\* -Directory |
  Move-Item -dest {'{0}\{1}-{2}' -f $_.PSParentPath.replace('\'+$_.Parent,''),$_.Parent,$_.Name} -WhatIf

如果输出看起来正常,请删除结尾的-WhatIf

对结果树进行采样:

C:\
└───root
    ├───V16
    ├───V16-1
    │       A.sql
    │       B.sql
    │
    ├───V16-2
    │       C.sql
    │
    ├───V16-4
    │       E.sql
    │
    ├───V17
    └───V17-1
            D.sql