Mover LOTE de archivos con distinto nombre

Quisiera crear un .BAT para que me permita mover archivos a carpetas BASE pero que el directorio cambie según el Nombre de Archivo, año en el que se creo y mes.

Paso capturas:

aca donde se bajan los archivos

Así lo estamos acomodando
La idea es MOVER todos los archivos que empiecen con "DAD*.GZ" a

BASE\2019\FEBRERO (Ya que el archivo se CREO en FEBRERO, pero si es MAYO que sea BASE\2019\MAYO)

Y así con los mismos que empiecen con "I*.GZ" y "DAR*.GZ".

Puede ser como opción que en ves de usar los nombre de los meses se puede usar numero (ENERO 01; FEBRERO 02)

Desde ya muchas por la ayuda!

1 Respuesta

Respuesta
2

Asumo que quieres mover los archivos GZ (sin descomprimirlos) a unas carpetas colgadas de la carpeta BASE que tengan como nombre la primera parte del nombre del GZ (DAD, DAR o I) seguida del año de creación del GZ y del mes de esa creación. De alguna manera desarrollar un árbol de carpetas, colgado de la carpeta BASE, en el que las ramas se obtienen del nombre, año y mes del archivo comprimido. Mira a ver si esto hace lo que quieres:

@echo off
cd\base
for /f "tokens=* delims=" %%x in ('dir /b *.gz') do call :tratar "%%x"
goto :EOF
:tratar
set fecha=%~t1
set aaaa=%fecha:~6,4%
set mm=%fecha:~3,2%
set /a mm=100%mm%%%100
set /a mm-=1
call :lista %mm% ENERO FEBRERO MARZO ABRIL MAYO JUNIO JULIO AGOSTO SEPTIEMBRE OCTUBRE NOVIEMBRE DICIEMBRE
for /f "tokens=1,* delims=_" %%a in ('echo %~1') do set carpeta=%%a
if not exist \BASE\%carpeta%\%aaaa%\%mes%\*.* md \BASE\%carpeta%\%aaaa%\%mes%
move "%1" \BASE\%carpeta%\%aaaa%\%mes%
pause
goto :EOF
:lista
for /l %%n in (1, 1, %1) do (shift /2)
set mes=%2
goto :EOF

Si el BAT está en la propia carpeta BASE la instrucción "cd\base" no debe usarse. Si está en otra ubicación podría ser necesario modificarla para que sitúe la ejecución en esa carpeta. He incluido un PAUSE en el tratamiento para poder ir viendo si las cosas se van haciendo correctamente y poder abortar el BAT antes de que haga mucho desastre. También se puede cambiar el MOVE por un COPY /Y en la fase de pruebas.

Ya me dirás.

Probé el BAT y todos los acrivos me los mueve a

 C:\BASE\%carpeta%\%aaaa%\%mes%\

ya que el directorio de Raiz es 

C:\CLIENTES\NETCOM

incluso borrando 

cd\base

desde ya MUCHAS GRACIAS

*archivos

Es evidente que la carpeta de partida del BAT no está bien establecida. Si la carpeta BASE está en c:\clientes\netcom la línea del cd\base debería ser cd\clientes\netcom\base. Prueba así y ya me dirás.

Perdón. Así tampoco se consigue todo (aunque algo sí). Prueba mejor este bat:

@echo off
set base=\clientes\netcom\base
cd %base%
for /f "tokens=* delims=" %%x in ('dir /b *.gz') do call :tratar "%%x"
goto :EOF
:tratar
set fecha=%~t1
set aaaa=%fecha:~6,4%
set mm=%fecha:~3,2%
set /a mm=100%mm%%%100
set /a mm-=1
call :lista %mm% ENERO FEBRERO MARZO ABRIL MAYO JUNIO JULIO AGOSTO SEPTIEMBRE OCTUBRE NOVIEMBRE DICIEMBRE
for /f "tokens=1,* delims=_" %%a in ('echo %~1') do set carpeta=%%a
if not exist %base%\%carpeta%\%aaaa%\%mes%\*.* md %base%\%carpeta%\%aaaa%\%mes%
move "%1" %base%\%carpeta%\%aaaa%\%mes%
pause
goto :EOF
:lista
for /l %%n in (1, 1, %1) do (shift /2)
set mes=%2
goto :EOF

Solo añade la variable %base% y la usa como referencia en lugar de escribir "a pelo" las rutas. Creo que eso debe resolver todas las dificultades.

¡Gracias! Ahí se resolvió el problema

con el segundo BAT

Muy bien. Me ha gustado mucho poder ayudarte y de paso me ha servido para ver como convertir en literales los meses extraídos en forma numérica de la fecha de creación del archivo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas