Batch move o conteúdo de uma pasta até um nível

4

É uma tarefa simples, em alguns casos, mas eu tenho milhares de arquivos dentro de centenas de pastas que eu quero mover para cima.

The directory structure goes like this:

C:\Photos\subject\randomnumbers\images\file.ext

And I want to end with:

C:\Photos\subject\randomnumbers\file.ext

Eu tentei executar for /r %i in ("*\images\*.*") do move *\*.* , mas não funciona como esperado.

Eu não consigo pensar em outra maneira de fazer isso além de fazê-lo manualmente. Embora isso funcione manualmente, eu me beneficiaria muito com uma operação automatizada que posso começar quando necessário.

É possível, e alguém pode me ajudar com isso?

    
por HASJ 19.08.2016 / 03:43

3 respostas

3

Isso deve funcionar para você:

for /r %i in ("images\*.*") do move %i %~pi..
  • %~pi extrai o caminho de %i (terminando com \ )
  • .. colocado após o caminho acima aponta para o diretório pai

É claro que não lida com a situação em que você tem arquivos com nomes conflitantes em subdiretórios.

    
por 19.08.2016 / 04:26
2

Isso não é muito sofisticado, e tenho certeza de que as pessoas encontrarão soluções melhores, mas aqui está uma rápida:

  1. Faça uma pesquisa simples (Explorer) por * , iniciando na pasta para a qual você deseja mover as coisas. Pode levar meio minuto ou mais para ser concluído.
  2. Classifique o resultado por caminho
  3. Selecione todos os arquivos (que é o que você deseja mover) que ainda não estão na pasta de destino (esses seriam seus 'milhares de diretórios' existentes. Eles estarão todos juntos após a classificação, portanto, 'clique' e 'shift + click' faz isso.
  4. Arraste-os para a árvore de estrutura de pastas à esquerda e solte-os na pasta de destino.
  5. Tome um café ou faça outro trabalho enquanto se move. O Windows normalmente pode mover de 40 a 7000 arquivos por segundo, dependendo do seu hardware.
  6. Selecione todos os diretórios - now empty- e exclua-os.

Note que você também pode fazer o passo 1 com filtros se quiser apenas determinados tipos de arquivos, por exemplo, *.jpg,*.png .

    
por 19.08.2016 / 03:52
2

Batch move a folder's content up one level

Aqui está uma solução em lote em que o MoveFromDir é o diretório com o qual você inicia o conteúdo que você moverá e o MoveToDir é o caminho explícito do diretório. ser movido um nível acima do MoveFromDir, então você teria que configurar essas variáveis de acordo.

Mover todas as pastas e arquivos em MoveFromDir e abaixo para MoveToDir

Por favor note que executando apenas o segundo loop FOR de:

  • FOR /F "TOKENS=*" %%A IN ('DIR /S /B "%MoveFromDir%\*.jpg"')

Você pode especificar apenas as extensões de arquivo que deseja mover para o MoveToDir (por exemplo, jpg)

@ECHO ON

SET MoveToDir=C:\Photos\subject\randomnumbers
SET MoveFromDir=C:\Photos\subject\randomnumbers\images

:: Move the folders from the move directory to the move to directory
FOR /D %%A IN ("%MoveFromDir%\*") DO MOVE /Y "%%~A" "%MoveToDir%"

:: Move any remaining files (or folders) from the move directory to the move to directory
FOR /F "TOKENS=*" %%A IN ('DIR /S /B "%MoveFromDir%\*.*"') DO MOVE /Y "%%~A" "%MoveToDir%\"
GOTO EOF

Mais recursos

por 19.08.2016 / 04:30