Комплексное копирование Powershell и создание каталогов, содержащих имя родителя - PullRequest
0 голосов
/ 10 марта 2020

У меня сложная структура папок для перемещения

У меня есть папка, содержащая 2000 файлов, которые необходимо переместить в новую файловую структуру, я выполняю простую задачу с PowerShell, но не настолько сложную, поэтому я полностью потерялся ... Не нашли решения по другим вопросам ...

все папки, содержащие 23 файла (некоторые .dds некоторые. xml и другие), папка должна быть полностью перемещена

Вот фактическая ситуация:

файлы \ 128891 \
файлы \ 128986 \
файлы \ 129362 \
файлы ... \

, которые необходимо переместить в:

files \ 128891 \ aaa \ bbb \ ccc \ ddd \ eee \ real \ 128891 \
files \ 128986 \ aaa \ bbb \ ccc \ ddd \ eee \ real \ 128986 \
files \ 129362 \ aaa \ bbb \ ccc \ ddd \ eee \ real \ 129362 \
файлы ... \ aaa \ bbb \ ccc \ ddd \ eee \ real ... \

имеет около 2000 папок в файлах, которые необходимо переместить вместе с файлами в

Большое спасибо за помощь

1 Ответ

1 голос
/ 10 марта 2020

Вы можете изменить мой код (не лучше, но работает)

 $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}

Но помните, что в этом случае могут возникать ошибки из-за повторяющихся имен файлов

...