递归地将子文件夹中的文件夹/文件移动到其父文件夹

时间:2018-05-05 19:11:58

标签: powershell parent move directory relative

我有一个高级文件夹(称之为'级别0'),其中包含一百个左右的子文件夹('级别1'),并且这些子文件夹中包含较低级别的子文件夹子文件夹和文件('级别2')。我需要动态移动来自< level; 2'的所有文件和文件夹。到它的1级子文件夹(或相对来说 - 它的父级)。

为了更好地可视化:

Master folder
├ Parent folder 1
│ ├─ Subfolder A
│ │  ├─ File A
│ │  └─ File B
│ ├─ Subfolder B
│ │  ├─ File C
│ │  └─ File D
│ ├─ File E
│ └─ File F
.
. ... many folders more ...
.
└─ Parent folder 134
   ├─ Subfolder CS
   │  ├─ File AGF
   │  └─ File ARH
   ├─ File ROQ
   └─ File JGL

我需要移动任何子文件夹中的所有内容'其父文件夹中的内容。如上所述,您可以看到父文件夹中可能已存在某些文件(例如文件E,F),它们应该保留。

目标:

Master folder
├─ Parent folder 1
│  ├─ File A
│  ├─ File B
│  ├─ File C
│  ├─ File D
│  ├─ File E
│  └─ File F
├─ Parent folder 119
│  ├─ File AZA
│  ├─ File AZB
│  ├─ File AZC
│  └─ File AZD
... and so on

这里的挑战是主文件夹下面有超过一百个这样的父文件夹,并且都有不同的名称。父文件夹中的子文件夹也有不同的名称。

我已尝试使用Get-ChildItem然后使用' ForEach'尝试将子项目(即文件夹)分配为变量,然后执行另一个Get-ChildItem递归并将所有内容移动到父项,但我无处可去,如果有任何移动,它似乎在回顾到C:\ Windows \文件夹。

注意[抱歉,更正不是*]文字代码,但方法,我想的是:

$master = "\\data\Master"
gci $master | foreach {
    $parent = $_
    gci ... | Move-Item -Destination $parent
}

2 个答案:

答案 0 :(得分:0)

我确实试着为你做点什么。这会将所有内容从level2文件夹移动到level1文件夹。请试一试,让我知道它是如何工作的。

$master = "C:\Temp\Level0\"
Get-ChildItem $master | ForEach-Object {
    $dest = ($_.fullname)+"\"
    $Loc = (Get-ChildItem $_.FullName | Select-Object -ExpandProperty fullname)+"\*"
    Move-item -Path $Loc -Destination $dest
}

答案 1 :(得分:0)

这应该做你想要的。但是,如果文件名已被使用,它将不会将具有相同文件名的任何文件移动到父文件夹。

$FilePath = Read-Host "Enter FilePath"
$FileSource = Get-ChildItem -Path $FilePath -Directory

foreach ($Directory in $FileSource)
{
    $Files = Get-ChildItem -Path $Directory -File

    foreach ($File in $Files){
        Move-item -Path $File.Fullname -Destination $FilePath
    }
}

希望这有用。