Mover um grande número de arquivos de um diretório para vários diretórios

StackOverflow https://stackoverflow.com/questions/2541887

  •  23-09-2019
  •  | 
  •  

Pergunta

Estou procurando criar um script em lote do Windows para mover cerca de 2.000 arquivos e dividi-los para que haja 10 arquivos por pasta.Tentei criar um script em lote, mas a sintaxe realmente me confunde.Aqui está o que tenho até agora

@echo off

:: Config parameters
set /a groupsize = 10
:: initial counter, everytime counter is 1, we create new folder
set /a n = 1
:: folder counter
set /a nf = 1

for %%f in (*.txt) do (
:: if counter is 1, create new folder
if %n% == 1 (
    md folder%nf%
    set /a n += 1
)

:: move file into folder
mv -Y %%f folder%nf%\%%f

:: reset counter if larger than group size
if %n% == %groupsize% (
    set /a n = 1
) else (
    set /a n += 1
)
)
pause

Basicamente, o que esse script faz é percorrer cada arquivo .txt no diretório.Ele cria um novo diretório no início e move 10 arquivos para esse diretório, depois cria uma nova pasta novamente e move outros 10 arquivos para esse diretório e assim por diante.No entanto, estou tendo problemas onde o n variável não está sendo incrementada no loop?Tenho certeza de que há outros erros também, já que a janela do CMD fecha para mim mesmo com pause.Qualquer ajuda ou orientação será apreciada, obrigado pelo seu tempo!

Foi útil?

Solução

Algumas coisas que você precisa saber:

  • SETLOCAL ENABLEDELAYEDEXPANSION é necessário, já que você está alterando variáveis ​​e usando seus valores alterados em um único bloco entre parênteses. SET /? na linha de comando fornecerá algumas informações.Pesquise esse termo na internet e você encontrará uma explicação melhor.
  • Os lugares que uso !nf! o formato das variáveis ​​está relacionado à expansão atrasada.
  • Como ghostdog74 mencionou, você não estava incrementando %nf%.
  • eu inicializei nf para 0 em vez de 1.Dessa forma, o número da pasta para a qual você deseja mover os arquivos é igual ao número da pasta que você acabou de criar.No seu código, você cria a pastaX, incrementa X e tenta mover o arquivo para X+1.
  • Você tem que usar MOVE para mover um arquivo, MV não é válido.

Este arquivo em lote funciona... mas certifique-se de testar!Testei apenas em uma pequena quantidade de arquivos.

@ECHO OFF

SETLOCAL ENABLEDELAYEDEXPANSION

:: Config parameters
SET groupsize=10
:: initial counter, everytime counter is 1, we create new folder
SET n=1
:: folder counter
SET nf=0

FOR %%f IN (*.txt) DO (
  :: if counter is 1, create new folder
  IF !n!==1 (
    SET /A nf+=1
    MD folder!nf!
  )

  :: move file into folder
  MOVE /Y "%%f" folder!nf!

  :: reset counter if larger than group size
  IF !n!==!groupsize! (
    SET n=1
  ) ELSE (
    SET /A n+=1
  )
)

ENDLOCAL

PAUSE

Outras dicas

você não está incrementando %nf%.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top