Combine dois conjuntos de pastas em uma nova estrutura

0

Eu tenho dois conjuntos de pastas, que são duas versões dos mesmos dados com subpastas idênticas (mais de 200). Eu preciso combinar os conjuntos usando um lote em uma estrutura ligeiramente nova. Por exemplo:

setA\folder1\A_files  
    \folder2\A_files  
    \folder3\A_files 
setB\folder1\B_files  
    \folder2\B_files  
    \folder3\B_files  

Eu preciso configurar setA assim:

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  

Basicamente, setA obtém duas novas pastas, uma para uma cópia de A_files e outra para mover B_files para. No final, nada é removido de setA e a pasta setB será excluída.

Simples, mas difícil de explicar.

Obrigado pela sua ajuda!

    
por scotcht 26.09.2018 / 20:04

1 resposta

0

Você pode encontrar muitas perguntas semelhantes com respostas apropriadas aqui no SuperUser para descobrir como começar a escrever um script para isso. Como você não mencionou o sistema operacional que está usando, fornecerei uma solução Powershell para Windows.

Crie as novas subpastas em cada pasta no setA, faça um loop pelos arquivos do setA e copie-os para o A_files_folder apropriado.

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\") }

Lidando com a segunda parte do trabalho, precisamos criar o caminho de destino usando partes do caminho do arquivo original, mas é quase o mesmo que o comando Copy-Item anterior. Eu usaria isso:

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

Tags