Объедините два набора папок в новую структуру

326
scotcht

У меня есть два набора папок, которые представляют собой две версии одних и тех же данных с одинаковыми подпапками (более 200). Мне нужно объединить наборы с помощью пакета в слегка новую структуру. Например:

Множество А \ folder1 \ a_files  \ Folder2 \ a_files  \ Folder3 \ a_files  
SETB \ folder1 \ B_files  \ Folder2 \ B_files  \ Folder3 \ B_files  

Мне нужно настроить setA так:

Множество А \ folder1 \ A_files_folder \ a_files  \ B_files_folder \ B_files  \ a_files  \ Folder2 \ A_files_folder \ a_files  \ B_files_folder \ B_files  \ a_files  \ Folder3 \ A_files_folder \ a_files  \ B_files_folder \ B_files  \ a_files  

По сути, setA получает две новые папки, одну для копии A_files и одну для перемещения B_files . В конце концов, ничего не удаляется из setA и папка setB будет удалена.

Просто, но сложно объяснить.

Спасибо за вашу помощь!

0
Пожалуйста, отредактируйте свой вопрос, чтобы сообщить, что вы уже пробовали. Worthwelle 6 лет назад 2
Сколько папок? Только для 3 папок просто скопируйте файлы вручную. harrymc 6 лет назад 0
200+ папок в каждом наборе scotcht 6 лет назад 0
(1) Я не понимаю, почему у вас есть `setA \ folderN \ A_files` и` setA \ folderN \ A_files_folder \ A_files`. (2) Разбейте его на более простые шаги и напишите сценарии: (2a) Переместите `setB \ folder1 \ B_files` в` setB \ folder1 \ B_files_folder \ B_files` (2b), сделайте это для всех `folderN` (2c), выполните то же самое для A (2d) переместить все `B_files_folder` в` setB` в `setA`. dirkt 6 лет назад 0

1 ответ на вопрос

0
bcs78

Вы можете найти много подобных вопросов с соответствующими ответами здесь, в SuperUser, чтобы понять, как начать писать сценарий для этого. Поскольку вы не упомянули, какую ОС вы используете, я предоставлю решение Powershell для Windows.

Создайте новые подпапки в каждой папке в setA, затем переберите файлы setA и скопируйте их в соответствующую папку A_files_folder.

Foreach ($dir in Get-ChildItem -Directory -Recurse .\setA) { New-Item -Path $dir.FullName -Name "A_files_folder" -ItemType "Directory"; New-Item -Path $dir.FullName -Name "B_files_folder" -ItemType "Directory"; }  Foreach ($file in Get-ChildItem -File -Recurse .\setA) { Copy-Item -Path $file.FullName -Destination $($file.DirectoryName + "\A_files_folder\") } 

При работе со второй частью задания нам нужно создать путь назначения, используя части исходного пути к файлу, но он почти такой же, как и в предыдущей Copy-Itemкоманде. Я бы использовал это:

Foreach ($file in Get-ChildItem -File -Recurse .\setB) { Move-Item -Path $file.FullName -Destination $(".\setA\" + $($file.DirectoryName.Split("\")[-1]) + "\B_files_folder\") } 

Похожие вопросы