Powershell 复杂复制并创建包含父名称的目录

Powershell complex copy and create directories containing name of parent

我有一个复杂的文件夹结构要移动

我有一个包含 2000 个文件的文件夹,这些文件必须在新的文件结构中移动,我用 powershell 做了一些简单的任务,但没有那么复杂,所以我完全迷路了...没有找到其他问题的任何解决方案...

所有包含 23 个文件的文件夹(一些 .dds 一些 .xml 等等)文件夹必须完全移动

这里是实际情况:

files8891\
files8986\
files9362\
files...\

必须移至:

files8891\aaa\bbb\ccc\ddd\eee\real8891\
files8986\aaa\bbb\ccc\ddd\eee\real8986\
files9362\aaa\bbb\ccc\ddd\eee\real9362\
files...\aaa\bbb\ccc\ddd\eee\real...\

文件中有大约 2000 个文件夹必须与其文件一起移动

非常感谢您的帮助

您可以修改我的代码(不是更好的方法,但有效)

 $foldernames=Get-ChildItem -Recurse "D:\testdir" | ?{ $_.PSIsContainer } #get all folder in start folder, for you must be "...files\"
    foreach($foldername in $foldernames){
    $files=Get-ChildItem -Path $foldername.FullName|Where-Object {! $_.PSIsContainer} #get all files in current folder, no recurse,no subfolders.
    $files|Move-Item -Destination (New-Item -ItemType Directory -Path (Join-Path -path $foldername.FullName  -ChildPath ("aaa\bbb\ccc\ddd\eee\real\"+$foldername.Name)) -Force)
    #move all files and create directories
    }

补充:

如果您在文件夹中有子文件夹,您必须像那样修复代码

$foldernames=Get-ChildItem "D:\testdir"  | ?{ $_.PSIsContainer } 
foreach($foldername in $foldernames){
$files=Get-ChildItem -Path $foldername.FullName
$files|Move-Item -Destination (New-Item -ItemType Directory -Path (Join-Path -path $foldername.FullName  -ChildPath ("aaa\bbb\ccc\ddd\eee\real\"+$foldername.Name)) -Force)
}

它从文件夹 128891(一个例子)中移动所有内容,包括子文件夹

如果您在文件夹中有子文件夹,但您只想从中移动文件,则必须像这样进行文件传输:

$files=Get-ChildItem -Path $foldername.FullName -recurse|Where-Object {! $_.PSIsContainer}

但请记住,在这种情况下,可能会因文件名重复而出现错误