.bat que copie archivos de una ruta a otra.

Creación de .bat que copie archivos de una ruta a otra, copiando solamente los archivos más recientes, por fecha y hora del archivo, además los archivos a copiar serán solamente los que tengan una nomenclatura en especial.

1 respuesta

Respuesta
1

Archivo más reciente sólo hay uno, el más reciente (dentro de cada posible selección, claro). Creo que ya en otro hilo he dicho, más o menos, como se hace eso aunque no fuera para un COPY. Puedes verlo en:

.bat Modificación archivo por fecha de registro del día

Perfecto, 

Como agrego más filtros en un for ?

for /f "tokens=*" %%a in ('dir /b /o-d TR_ERROR_ENT_*.txt') do (xcopy "%%a" C:\Users\Desktop\archivo_de_control &goto :eof)

Que me filtre por estos archivos:

  • TR_ERROR_ENT_
  • TR_NOPRO_ENT_
  • TR_PORERROR_ENT_

Pues solo se me ocurre que utilices 3 FOR, uno para cada filtro y uno detrás del otro.

Y ya que estamos, no estaría de más que contestes algo en las otras preguntas que tienes pendientes de respuesta. Y si ya se te ha resuelto la consulta la cierras y la calificas.

He intentado como indicas pero solo imprime el primer registro y no los otros, osea el primer for, que podrá ser ?

Setlocal EnableDelayedExpansion
set ruta=C:\Users\Desktop\archivo
cd "%ruta%"
for /f "tokens=*" %%a in ('dir /b /o-d TR_ERROR_ENT_*.txt') do (copy "%%a" C:\Users\Desktop\archivo_de_control &goto :eof);
for /f "tokens=*" %%b in ('dir /b /o-d TR_NOPRO_ENT_*.txt') do (copy "%%b" C:\Users\Desktop\archivo_de_control &goto :eof);
for /f "tokens=*" %%c in ('dir /b /o-d TR_PORERROR_ENT_*.txt') do (copy "%%c" C:\Users\Desktop\archivo_de_control &goto :eof);

Sí. Es que el "goto :eof" te saca del bat. Hay que cambiarlo en los dos primeros y crear las "etiquetas" de destino correspondientes.

Prueba así:

@echo off
set ruta=C:\Users\Desktop\archivo
cd "%ruta%"
for /f "tokens=*" %%a in ('dir /b /o-d *.txt') do (copy "%%a" C:\Users\Desktop\archivo_de_control &goto :uno)
:uno
for /f "tokens=*" %%b in ('dir /b /o-d *.bat') do (copy "%%b" C:\Users\Desktop\archivo_de_control &goto :dos)
:dos
for /f "tokens=*" %%c in ('dir /b /o-d *.csv') do (copy "%%c" C:\Users\Desktop\archivo_de_control &goto :eof)

Y te sugiero que utilices la herramienta SNIPPET de la página (el icono <> de la barra de herramientas) para insertar el texto de los bat. Es la que uso yo para que salgan en una ventanita como la de arriba.

Y también me gustaría saber si has probado lo que te dije del Powershell (en la primera de las consultas). Si lo has hecho me gustaría saber si has notado mejora en cuanto al tiempo de respuesta. Y no estaría mal aportar esa información (si la hay) en el propio hilo por si le sirve a alguien más.

Perdón. He copiado mi bat de pruebas en lugar del tuyo. Sería así:

@echo off
set ruta=C:\Users\Desktop\archivo
cd "%ruta%"
for /f "tokens=*" %%a in ('dir /b /o-d TR_ERROR_ENT_*.txt') do (copy "%%a" C:\Users\Desktop\archivo_de_control &goto :uno)
:uno
for /f "tokens=*" %%b in ('dir /b /o-d TR_NOPRO_ENT_*.txt') do (copy "%%b" C:\Users\Desktop\archivo_de_control &goto :dos)
:dos
for /f "tokens=*" %%c in ('dir /b /o-d TR_PORERROR_ENT_*.txt') do (copy "%%c" C:\Users\Desktop\archivo_de_control &goto :eof)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas