Mover un gran número de archivos en un directorio a varios directorios

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

  •  23-09-2019
  •  | 
  •  

Pregunta

Estoy buscando para crear un archivo por lotes de Windows para mover alrededor de 2.000 archivos y dividirlos por lo que hay 10 archivos por carpeta. He intentado crear un archivo por lotes, pero la sintaxis realmente perturba mi mente. Aquí es lo que tengo hasta ahora

@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

Básicamente lo que hace este script es recorrer cada archivo .txt en el directorio. Se crea un nuevo directorio en el comienzo y se mueve 10 archivos en ese directorio, a continuación, crea una nueva carpeta de nuevo y se mueve otros 10 archivos en ese directorio, y así sucesivamente. Sin embargo, estoy teniendo problemas en los que la variable n no se incrementa en el circuito? Estoy seguro de que hay otros errores también, ya que la ventana de CMD se cierra sobre mí, incluso con pause. Cualquier ayuda o guía se agradece, gracias por su tiempo!

¿Fue útil?

Solución

Algunas cosas que debe saber:

    Se necesita
  • SETLOCAL ENABLEDELAYEDEXPANSION, ya que está cambiando las variables y el uso de sus valores cambiados en un solo bloque con paréntesis. SET /? en la línea de comandos le dará algo de información. Buscar en la Internet para este término y se encuentra una explicación mejor.
  • Los lugares que utilizan el formato !nf! para las variables se relaciona con la expansión retardada.
  • Como ghostdog74 mencionados, que no estaban incrementando %nf%.
  • I inicializado nf a 0 en vez de 1. De esta manera, el número de la carpeta que desea mover archivos a es el mismo que el número de la carpeta que acaba de crear. En su código, se crea folderX, entonces X de la subasta, y luego intenta mover el archivo a X + 1.
  • Usted tiene que usar MOVE para mover un archivo, MV no es válido.

Esto funciona el archivo por lotes ... pero asegúrese de que la prueba! Sólo probado en una pequeña cantidad de archivos.

@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

Otros consejos

No está incrementando %nf%.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top