Linha de comando do Windows: move o conteúdo de todas as subpastas para o pai

2

Tarefa:

Folder1>Subfolder1>Stuff1
Folder1>Subfolder2>Stuff2
...

Mover o conteúdo da subpasta para a pasta pai (Stuff1 / 2 são subdiretórios que possuem outros arquivos ou subdiretórios)

Folder1>Subfolder1
Folder1>Subfolder2
Folder1>Stuff1
Folder1>Stuff2

Eu tentei:

for /d %f in (.\*) do (
pushd %f
move .\%f\* ..
popd
)

Mas isso não funcionou.

    
por key2starz 09.11.2013 / 07:04

2 respostas

2

Você não pode fazer move * .. para diretórios. A única maneira de move mover um diretório é especificar o próprio nome do diretório (nenhum caractere curinga é permitido). Então você precisa de um segundo loop (dentro do primeiro) para percorrer os diretórios:

@echo off
for /d %%d in ("*") do (
  for /d %%e in ("%%d\*") do (
    move "%%e" .
  )
)

Não há necessidade de pushd , porque você pode movê-lo do pai para o pai.

nota: isso é usado para um arquivo em lotes, de forma que o %d o % seja dobrado para %%d e %%e . Se você executá-lo diretamente a partir do prompt, você precisará apenas de um % .

Editar:
Se as subpastas primeiro nível (Subpasta1 e Subpasta2) também contiverem arquivos (além das pastas Stuff1 e Stuff2), você poderá adicionar outra movimentação ao exterior.

@echo off
for /d %%d in ("*") do (
  for /d %%e in ("%%d\*") do (
    move "%%e" .
  )
  move "%%d\*" .
)
    
por 09.11.2013 / 12:37
0

Tente usar o xcopy no prompt de comando. Você pode ler mais sobre o xcopy aqui: Xcopy O Xcopy tem a capacidade de copiar pastas, subpastas e arquivos de uma só vez. Você pode escrever um pequeno arquivo de lote para automatizar o processo, se quiser usá-lo mais de uma vez.

    
por 09.11.2013 / 10:33