我有一个高级文件夹(称之为'级别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
}
答案 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
}
}
希望这有用。