Encuentra todas las carpetas donde el nombre está en el rango de tiempo

Encuentra todas las carpetas donde el nombre está en el rango de tiempo

Tengo muchas carpetas y tienen la siguiente convención de nomenclatura:

  • carpeta1(1924)
  • carpeta2 (2014)
  • carpeta3 (1999)
  • carpeta4(2001)
  • carpeta5(1891)

Ahora me encantaría mover/buscar en el explorador todas las carpetas donde el año (entre ()) está por debajo del año 2000 y por encima del año 1900.

Entonces, en la salida estarían la carpeta1 y la carpeta3.

¿Existe algún script que pueda hacer esto?

Respuesta1

Si todas esas carpetas están debajo C:\Source folder, ejecute el siguiente archivo por lotes desde C:\Source foldersí mismo:

@echo off
set dest=D:\Target folder
for /f "tokens=1,2 delims=()" %%d in ('dir /ad /b') do (
    if %%e gtr 1900 (
        if %%e lss 2000 (
            if not exist "%dest%\%%d(%%e)\" md "%dest%\%%d(%%e)"
            robocopy "%%d(%%e)" "%dest%\%%d(%%e)" /e /is /move
        )
    )
)

Respuesta2

Aquí hay una forma de muestra de hacer esto (asumiendo que todos los directorios están en un nivel)

find . -type d -name "fold*" -maxdepth 1|awk -F'[()]'  '{if ($2 > 1900 && $2 < 2000) print $0}'

Si desea ejecutarlo en el sistema operativo Windows, la forma de ejemplo es utilizar algún entorno cygwin (también mobaxterm funciona bien) y ejecutarlo en la terminal. Lamentablemente, mis conocimientos de Windows son muy modestos y no puedo reescribirlo para el script cmd nativo.

información relacionada