Como converter um diretório de árvore em um diretório de nível único

0

Esta questão pode ficar confusa, é melhor mostrar algum exemplo. Eu tenho uma pasta que contém muitos subdiretórios que podem ser de vários níveis. A estrutura abaixo mostra a pasta, todas as pastas contêm seu próprio arquivo.

mainFolder
|--a
|--|--ab
|--|--ac
|--|--ad
|--b
|--b
|--|-cd
|--d

O acima é a estrutura da árvore do mainFolder. Eu estou tentando escrever um arquivo em lotes capaz de converter a árvore inteira em uma estrutura de nível único.

--a
--ab
--ad
--b
--c
--cd
--d

Acima é a saída esperada. Todo o arquivo deve estar em sua própria pasta.

setlocal EnableDelayedExpansion 

set "targetPath=%~dp0mainFolder"

for /r "%targetPath%" %%i in (.) do (

     echo %%i

)

pause

Este é o meu código atual, capaz de percorrer e exibir o caminho absoluto do diretório

    
por Leon Armstrong 20.09.2017 / 16:10

1 resposta

2

Existem inconsistências: na origem --c está ausente no dest não há --ac

Árvore de origem:

> tree
└───mainFolder
    ├───a
    │   ├───ab
    │   ├───ac
    │   └───ad
    ├───b
    ├───c
    │   └───cd
    └───d

A pasta principal fornecida está na raiz da unidade neste único cmdline:

@for /r "\mainfolder" %A in (.) do @for /f "tokens=5 delims=\" %B in ("%A") do @move "%A" "\mainFolder"

Produzirá esta árvore de destino:

> tree
└───mainFolder
    ├───a
    ├───ab
    ├───ac
    ├───ad
    ├───b
    ├───c
    ├───cd
    └───d

Se não ajustar o valor dos tokens de 5 para corresponder ao nível de dir. Em um arquivo em lote, duplique todos os sinais de porcentagem %%

    
por 20.09.2017 / 18:48