Como achatar diretórios no Windows?

0

Eu sei sobre loops como

for /r %f in (*) do @move %f .

e

for /r %f in (.) do @move %f .

mas não consigo encontrar nenhum código que se encaixe no meu cenário. Digamos que eu tenha muitos diretórios com esta aparência:

Folder 1 
  Folder 2
    File 1
    File 2
    File 3
    Folder 3
      File 4
Folder 4 
  Folder 5
    File 5
    File 6
    File 7
    Folder 6
      File 8

e eu quero pegar o arquivo 4 na pasta 2, o arquivo 8 na pasta 5 e assim por diante, como eu faria isso? Para este cenário, eu tenho alguns diretórios que se parecem com isso, então manualmente indo para cada um não funcionaria. Qual é a solução mais simples, preferencialmente usando o Batch? O resultado final ficaria assim:

Folder 1
  Folder 2
    File 1
    File 2
    File 3
    File 4
Folder 4
  Folder 5
    File 5
    File 6
    File 7
    File 8
    
por Liam Bonilla 30.12.2017 / 05:36

1 resposta

1

Este conjunto de comandos deve colocar todos os arquivos em um diretório no diretório de nível superior - para que todos os arquivos da Pasta 1 sejam colocados diretamente na Pasta 1 e todos os arquivos da Pasta 4 sejam colocados diretamente na Pasta 4.

Você precisará modificá-lo para obter a configuração exata descrita na pergunta, mas esperamos que seja um bom começo. Além disso, sou relativamente novo no script em lote, então teste isso em alguns diretórios e arquivos temporários e sem importância antes de tentar fazer qualquer coisa nos dados reais .

dir /ad /b *your current directory* > dirs.txt
for /F "eol=" %i in (dirs.txt) do @echo dir /a-d /b /s %i ^> %i.txt >> script.bat
.\script.bat
for /F "eol=" %j in (dirs.txt) do for /F "eol=" %i in (%j.txt) do @move %i %j

Crédito para esta pergunta para explicar como recursivamente listar apenas arquivos e esta questão para explicar como usar um loop for com um arquivo de texto.

    
por 30.12.2017 / 06:52