Copiar 2 archivos más recientes de una carpeta a otra con comando .bat

Iniciado por Josejanseco, 27 Junio 2019, 10:51 AM

0 Miembros y 1 Visitante están viendo este tema.

Josejanseco

Tengo una carpeta de origen (D: \ Board_Interfaces \ Historico), que recibe archivos ".csv" diarios de un servidor, los nombres de los archivos son básicamente dos:

-KON.DAILY_D_ES_20190331_20190412
-KON.DAILY_P_ES_20190331_20190412

Como puede ver, el nombre del archivo cambiará según la fecha, pero solo me interesa la fecha de modificación. Además, esta carpeta de origen tiene varios archivos con nombres basados en los ejemplos anteriores. Me gustaría tomar los últimos "KON.DAILY_D" y "KON.DAILY_P", y copiarlos en una carpeta de destino (D: \ Board_Interfaces \ Interfaces \ IN_KON). Gracias por la ayuda

De momento tengo este comando pero no me funciona

@Echo off
setlocal enableDelayedExpansion
set "source=C:\Users\guillermo.abascal\Desktop\IN_KON"
set "target=C:\Users\guillermo.abascal\Documents\Prueba"

PushD "%source%"
set "counter=0"
for /f "tokens=* delims=" %%A in ('dir "*.csv" /b /o:-d /t:w') do (
   set /a counter+=1
   Set Copy[!counter!]=copy "%%~fA" "%target%\"
   if !counter! equ 2 goto :break
)
:break
Del /Q "%target%\*"
For /L %%C in (1,1,%counter%) Do !Copy[%%C]!
PopD

@XSStringManolo

No entiendo exactamente que es lo que quieres hacer.
Tampoco cual es la utilidad.

Quieres hacer un copia y pega de los 2 ultimos archivos?

No entiendo quien hace estos embrollos de códigos con tanta flag y tanto parámetro para algo sencillo.
Solo tienes que usar  %%~t? Para sacar la fecha de modificación del archivo. %%~n para el nombre.
Recorres el directorio en un for.
Guardas el nombre y la fecha de cada archivo en un array o linked list, o algo así.
Comparas las fechas en los arrays para ordenarlos.
Obtienes el nombre de los 2 primeros arrays.
Copias los 2 primeros ficheros del array en la carpeta destino.

Si quieres metes todo en una función y le pones un timer para que revise por archivos cada cierto tiempo por ejemplo timeout 3600 hará que cada hora se compruebe la carpeta. Para que se ejecute al arrancar pegas un acceso directo al bat en la carpeta startup y ahí se quedara el proceso abierto  comprobando cada hora.

Josejanseco

Hola, lo que sucede es que una interfaz realiza descargas diarias a una carpeta, con los nombres:
-KON.DAILY_D_ES_AAAAMMDD_AAAAMMDD
-KON.DAILY_P_ES_AAAAMMDD_AAAAMMDD

Dicha carpeta, ya contiene archivos similares de días anteriores, por lo que necesito copiar el más reciente.

Los dos archivos más recientes los tengo que copiar (diariamente) a una carpeta, desde la cual. una aplicación de BI realiza la carga.

La utilidad es ahorrar tiempo al no tener que realizar este proceso manualmente.

Lamentablemente, no poseo conocimientos de informática por lo que buscar en foros ha sido mi única opción. El comando que copié en el post anterior, debería en un principio realizar la función que necesito. Desconozco si hay una manera más sencilla de hacerlo, pero estaría inmensamente agradecido si pudieses ayudarme con eso. Como te comentaba, esta es una área ajena a mis estudios, y aunque ya te tomaste la molestia de explicármelo paso a paso, no tengo ni idea de como plasmarlo en un código.

No se si tengas tiempo de escribirlo solo para que yo lo pueda pegar, de igual manera gracias por los consejos