Batch para copiar archivos con filtro por fecha de creación.

Tengo el siguiente código al cual le quisiera agregar el filtro de fecha, que solo considere los archivos de este mes, por favor ayudenme:

xcopy "\\10.200.9.24\InfoPeru\VT*.DBF" "C:\Users\jcueval\Desktop\Pruebas_Batch\HOLIBOLI\"  /e /c /y /d:

1 Respuesta

Respuesta
1

Prueba con este bat:

@echo off
set aaaa=%date:~6%
set mm=%date:~3,2%
set fecha=%mm%-01-%aaaa%
xcopy "\\10.200.9.24\InfoPeru\VT*.DBF" "C:\Users\jcueval\Desktop\Pruebas_Batch\HOLIBOLI\"  /e /c /y /d:%fecha%

Estoy suponiendo que en tu entorno la variable %DATE% tiene el formato dd/mm/aaaa (puedes verlo ejecutando el comando ECHO %DATE% en una ventana CMD o "Símbolo del sistema"). Si el formato fuera distinto habría que retocar el bat para ajustarlo a ese formato. Para que solo considera "los archivos de este mes" he puesto como fecha para el parámetro /d del xcopy la correspondiente a mm-01-aaaa, primer día del mes en curso. No tengo muy claro si eso incluye o no el primer día. Si no fuera así habría que tomar el último día del mes previo y eso podría complicar algo la cosa.

En todo caso te sugiero que pruebes y nos digas. Seguro que encontramos la solución.

Hola Ggirald, muchas gracias por tu ayuda, tengo esto, que he modificado de tu código (la ultima línea)

@echo off
set aaaa=%date:~6%
set mm=%date:~3,2%
set fecha=%mm%-01-%aaaa%
xcopy "\\10.200.9.24\InfoPeru\VT*.DBF" "C:\Users\jcueval\Desktop\Pruebas_Batch\HOLIBOLI\" /e /c /y /d:06-13-2019

Si ejecuta muy bien como constante, pero el problema es con las variables, cuando le pongo al /d las variables siempre me tira error, no se si están mal declaradas pero siempre me da error.
Por favor ayúdame, que crees que pueda ser.

Siempre me sale problema de parámetro no válido /d:.

No se exactamente que sea, ayúdame :D

Acabo de determinar el problema, el problema es el seteo de la variable, estoy haciendo pruebas con echo y la variable y me doy cuenta que no esta jalando el dato exacto que necesito entiendo que esto " ~3, 2% ", son modificaciones a la fecha, quería saber como podría moverlo para que se ajuste a mis necesidades. Muchas Gracias!

Ya lo termine gggirald, muchas gracias. El problema fue el seteo de las variables y lo acople a mis necesidades, una consulta, ¿las fechas cambian de acuerdo a la pc? Por que no estoy muy seguro.

Muchas Gracias!

No acabo de entender tu consulta: "¿las fechas cambian de acuerdo a la pc?"

Como te decía, el formato de la variable de entorno %DATE% puede cambiar según la "configuración regional" del equipo, el "idioma" con el que esté configurado. Y veo que has hecho las pruebas que te sugería para ver ese formato en tu equipo. Pero si no te refieres a eso no se me ocurre a que te puedes estar refiriendo con la consulta.

Exacto, me refería al formato, en el actual me figura lo siguiente: jue. 13/06/2019, con la sentencia %Date, es por eso que me genero duda si en otro equipo diría jueves o thursday y la macro dejaría de funcionar.

Entiendo, entonces, que la consulta es si el bat que te funciona correctamente en tu equipo puede no funcionar bien en otros equipos. Creo que la respuesta es, sí, puede no funcionar en otros equipos si están configurados con una "configuración regional/idioma" que cambie el formato de la variable de entorno DATE. He estado buscando en la red y este método podría funcionar en cualquier equipo:

@echo off
for /f "skip=1 delims=" %%x in ('wmic os get localdatetime') do set FechaHora=%%x&echo.%FechaHora%
set aaaa=%FechaHora:~0,4%
set mm=%FechaHora:~4,2%
set fecha=%mm%-01-%aaaa%
xcopy "\\10.200.9.24\InfoPeru\VT*.DBF" "C:\Users\jcueval\Desktop\Pruebas_Batch\HOLIBOLI\"  /e /c /y /d:%fecha%

Obviamente se basa en que en esos equipos el comando "wmic os get localdatetime" funcione, que creo que lo hará. La respuesta a ese comando debe ser algo como:

LocalDateTime
20190614090557.482000+120

Ya me contarás si te funciona.

La línea del FOR /F debería ser:

for /f "skip=1 delims=" %%x in ('wmic os get localdatetime') do set FechaHora=%%x

Hola ggirald eres un genio, me sirvió de maravilla la información que me pasaste. Ya entregue el batch y el usuario lo tiene corriendo perfectamente, muchas gracias. ¿Una ultima consulta y si yo quisiera que solo copie los archivos que no existen como podría hacer? Es que quiero que los existentes ya no los reemplace, si quito el /y, me pide si quiero reemplazar los existentes y quisiera que no, cuando doy un xcopy /? para ver cual podría poner, no me sale ninguno :(

Por lo que he visto en la red no parece haber ninguna forma de hacer eso con XCOPY. Pero parece que sí que podría hacerse con ROBOCOPY (un comando de copia muy potente que no he usado nunca). Mira a ver si este bat puede hacer lo que necesitas:

@echo off
for /f "skip=1 delims=" %%x in ('wmic os get localdatetime') do set FechaHora=%%x&echo.%FechaHora%
set dia=%FechaHora:~6,2%
robocopy "\\10.200.9.24\InfoPeru\VT*.DBF" "C:\Users\jcueval\Desktop\Pruebas_Batch\HOLIBOLI\" /xc /xn /xo /MAXAGE:%dia% 

Hola gggirald, muchas gracias y si he probado con robocopy, antes de armar este código lo intente con robocopy pero no se como hacer que comience en VT y termine en .DBF, en xcopy le puse VT*.DBF, pero en robocopy esto me da error, por favor ayúdame.

Si deseas puedo crear otra pregunta.

No, no hace falta que crees otra pregunta. He estado mirando información sobre el ROBOCOPY (como te dije no lo he usado nunca) y creo que el bat quedaría así:

@echo off
for /f "skip=1 delims=" %%x in ('wmic os get localdatetime') do set FechaHora=%%x&echo.%FechaHora%
set dia=%FechaHora:~6,2%
robocopy "\\10.200.9.24\InfoPeru" "C:\Users\jcueval\Desktop\Pruebas_Batch\HOLIBOLI\" VT*.DBF /xc /xn /xo /MAXAGE:%dia% 

Prueba y me dices si funciona (y si no funciona puedes copiarme lo que salga)

Este es el error, robocopy, he intentado modificarlo pero nada

ERROR: parámetro no válido nº2 : "C:\Users\jcueval\Desktop\Pruebas_Batch\HOLIBOLI" VT*.DBF /xc /xn /xo /MAXAGE:%FechaHora:~6,2% "

Uso sencillo :: ROBOCOPY origen destino /MIR

origen :: Directorio de origen (unidad:\ruta o
\\servidor\recurso_compartido\ruta).
destino :: Directorio de destino (unidad:\ruta o
\\servidor\recurso_compartido\ruta).
/MIR :: Reflejar un árbol de directorios completo.

Una de las razones por la que no uso el ROBOCOPY es que suelo trabajar con Windows XP y en esa versión de Windows no existe ese potente comando. De modo que he decidido probar con Windows 10 y he descubierto que en ese entorno el comando "wmic os get localdatetime" genera una línea en blanco extra. Eso hace que el BAT no funcione tal como está porque la variable "FechaHora" se quede en blanco. Y eso explicaría, también, que el ROBOCOPY dé error porque el parámetro MAXAGE no tenga datos correctos. Creo que esta nueva versión del bat (probada en Windows 10) ya debe funcionar bien:

@echo off
for /f "skip=1 delims=" %%x in ('wmic os get localdatetime') do set FechaHora=%%x&goto :seguir
:seguir
set dia=%FechaHora:~6,2%
robocopy "\\10.200.9.24\InfoPeru" "C:\Users\jcueval\Desktop\Pruebas_Batch\HOLIBOLI\" VT*.DBF /xc /xn /xo /MAXAGE:%dia% 

Pruébala y dime como va.

gggirald, me he dado cuenta que el vt*.dbf no lo esta reconociendo muy bien. Por otro lado, acabo de hacer la prueba con robocopy y no me esta trayendo los archivos a los que accedo por VPN, no se si el comando no pueda usarse para eso pero si pude hacerlo con xcopy. Gracias!

Lo siento gggirald, lo de la copia de los archivos no se daba pues ya existian en el directorio de destino y no los sobre escribia jaja. Por otro lado, si funciona lo del *.dbf, pero cuando pongo VT*DBF, no lo identifica, en ese caso, si se filtrar para que terminen con .dbf, pero no se como hacer que empiecen con TV.

Porfa ayudameeee. Gracias!!!

Me sorprende lo que dices de que con *.DBF se comporte bien y no lo haga con VT*.DBF. ¿Saca algún mensaje de error? Dado que el comando que estamos usando tiene peculiaridades poco frecuentes (como la combinación /xc /xn /xo) te sugiero que pruebes directamente el comando (en lugar del BAT, al menos hasta que quede claro el asunto) para familiarizarte con él y adquirir cierta confianza. Yo probaré cuando tenga tiempo y te diré algo.

Ya he podido probar un comando similar en mi entorno de prueba (también es una copia "en red" y en concreto la selección de archivos que he hecho era c*.xls*) y me ha funcionado correctamente. Esto hace que me reafirme en lo que decía en mi mensaje anterior. Revisa bien las cosas porque el comando del ROBOCOPY debe funcionar correctamente tal como está planteado.

Tienes toda la razón, acabo de revisaro y efectivamente, estaba equivocado por que estaba complicado con la conexión VPN, (Esto es para jalar datos de una VPN), y había una mala conexión lo que me hacia pensar que estaba mal, ahora ya logre ejecutar lo que requería. Muchas Gracias gggirald, eres lo máximo!, Tengo un problema con una consulta en PLSQL, si por ahí sabes de ello me ayudas por favor je je. Gracias!

Aunque en su momento trabajé con SQL ya estoy desentrenado y, además, el PLSQL no es exactamente lo mismo. De todas formas le he echado un vistazo a tu consulta (Consulta con Query PL-SQL ) y solo se me ocurre recomendarte que vayas probando parcialmente cada parte de esa consulta tan compleja para ver si así puedes determinar dónde puede estar el fallo (o fallos, porque podría haber más de uno)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas