Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)
Autor
|
Tema: Problema con fecha en programa . bat... (Leído 3,349 veces)
|
jconnor
Desconectado
Mensajes: 6
|
Hola amigos, primero q todo saludarlos y felicitarlos pr el foro, se encuentran buenas cosas; buscando y guiandome en el foro cree un programa para realizar un backup de una base de datos y ponerle como nombre la fecha en q se hace, en escencia lo q hace es comprimirlo con winzip y copiarlo a una ubicacion; el problema surge cuando necesito restaurar dicha base en una de prueba, todos los dias, creé el programa para restaurarla, entonces lo q hago es con el mismo codigo q le doy el nombre, identifico el backup creado y le resto 1 al dia, puesto q hago el backup a las 11pm todos los dias y lorestauro a la 1 am del siguiente dia, hasta ahi todo bien, el problema surge cuando la fecha es el primero del mes, puesto q como siempre le resto 1 al dia y cuando pongo el nombre en la parte del dia me queda 0!, cuando el primero cae en lunes, peor, porque le resto 3 y me da -2, no se q hacer, se q existe la variable date pero no se como restarle 1 para q me de la fecha anterior, espero q por favor me ayuden, aca esta el codigo de crear el backup: @ECHO OFF CLS ECHO. ECHO COPIA DE SEGURIDAD DE DATOS ECHO. set dia= set mes= set año= set nombre= for /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set dia=%%a& set mes=%%b& set año=%%c) set nombre=BOG%mes%%dia% wzzip -P -r D:\LZHWEB\%nombre%.zip D:\bogota\bd\jord\*.* ECHO. set nombre=SER%mes%%dia% wzzip -P -r D:\LZHWEB\%nombre%.zip D:\servicio\bd\jord\*.* ECHO. ECHO PROCESO TERMINADO : TIME y el de restaurarlo:@ECHO OFF CLS ECHO. ECHO COPIA DE SEGURIDAD DE DATOS ECHO. set dia= set mes= set año= set nombre= set cont= for /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set dia=%%a& set mes=%%b& set año=%%c) set cont=1 set /a dia=%dia%-%cont% set nombre=BOG%mes%%dia% cd \ d: cd \ cd copiabog\bd\jord del j*.d* wzunzip -e -o C:\LZHWEB\%nombre%.zip d:\copiabog\bd\jord ECHO. set nombre=SER%mes%%dia% cd \ cd copiaserv\bd\jord del j*.d* wzunzip -e -o C:\LZHWEB\%nombre%.zip d:\copiaserv\bd\jord ECHO. ECHO PROCESO TERMINADO : TIME Gracias por la ayuda...
|
|
|
|
« Última modificación: 2 Junio 2011, 22:12 por Leo Gutiérrez. »
|
En línea
|
|
|
|
|
|
Novlucker
Ninja y
Moderador
 
Desconectado
Mensajes: 10.239
Yo que tu lo pienso dos veces
|
El problema que veo es determinar si el mes tiene 30 o 31 días (28/29 febrero), sería realmente sencillo hacerlo en vbs, pero en batch  Saludos
|
|
|
|
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD http://twitter.com/novlucker "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
jconnor
Desconectado
Mensajes: 6
|
El problema que veo es determinar si el mes tiene 30 o 31 días (28/29 febrero), sería realmente sencillo hacerlo en vbs, pero en batch  Saludos Ok, amigo, gracias, yo de vbs nada, sera q me puedes orientar como combino el script con vbs, donde puedo encontrar informacion para guiarme?, gracias por la ayuda 
|
|
|
|
|
En línea
|
|
|
|
|
EddyW
|
El problema que veo es determinar si el mes tiene 30 o 31 días (28/29 febrero), sería realmente sencillo hacerlo en vbs, pero en batch  Saludos Ok, amigo, gracias, yo de vbs nada, sera q me puedes orientar como combino el script con vbs, donde puedo encontrar informacion para guiarme?, gracias por la ayuda  Aqui mismo en el foro hay un tuto colgado y es el de NovLucker: http://foro.elhacker.net/scripting/tutorial_vbscript-t229032.0.htmlPara cuando aprendas, usa Time en VBS para hacer eso.. SaluDOS!!!
|
|
|
|
|
En línea
|
|
|
|
jconnor
Desconectado
Mensajes: 6
|
El problema que veo es determinar si el mes tiene 30 o 31 días (28/29 febrero), sería realmente sencillo hacerlo en vbs, pero en batch  Saludos Ok, amigo, gracias, yo de vbs nada, sera q me puedes orientar como combino el script con vbs, donde puedo encontrar informacion para guiarme?, gracias por la ayuda  Aqui mismo en el foro hay un tuto colgado y es el de NovLucker: http://foro.elhacker.net/scripting/tutorial_vbscript-t229032.0.htmlPara cuando aprendas, usa Time en VBS para hacer eso.. SaluDOS!!! Ok amigo, me pondre a revisar el tuto, gracias por la ayuda
|
|
|
|
|
En línea
|
|
|
|
Novlucker
Ninja y
Moderador
 
Desconectado
Mensajes: 10.239
Yo que tu lo pienso dos veces
|
Ahora que lo miro detenidamente me doy cuenta de lo sencillo que es  No es necesario que aprendas vbs, te dejo el code: wscript.echo dateadd("d",-1,wscript.arguments(0))Solamente eso, este script recibe una fecha como parámetro, y le resta un día, para posteriormente mostrarlo en pantalla Lo que deberías de hacer es dejar el script (*.vbs) en el mismo directorio donde esta el bat (para mayor comodida) o bien llamarlo con la ruta completa agregando una línea más o menos así (en tu bat) cscript/nologo fecha.vbs %date% > fecha.txt Como ves, simplemente lo llamas desde línea de comandos, le pasas una fecha como parámetro, en este caso la de hoy, y el script mostrará en pantalla la fecha -1 día En tu caso puntualmente deberías de redirigir la salida a un archivo temporal (ej: fecha.txt) como he hecho en el ejemplo, ya que de este modo tendrás la fecha en un archivo al que puedes consultar luego desde tu batch. Es decir, con esto almacenas la fecha en un archivo, y luego tu te encargas de acceder a el desde el batch y hacer lo que gustes con el contenido  Espero se haya entendido ... Saludos P.D: igualmente y trás ver este ejemplo (siempre y cuando se haya entendido) espero te entren ganas de aprender algo de vbs, ya que como ves con un par de líneas puedes encontrar la solución a un problema
|
|
|
|
« Última modificación: 6 Mayo 2009, 07:10 por Novlucker »
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD http://twitter.com/novlucker "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
jconnor
Desconectado
Mensajes: 6
|
Ahora que lo miro detenidamente me doy cuenta de lo sencillo que es  No es necesario que aprendas vbs, te dejo el code: wscript.echo dateadd("d",-1,wscript.arguments(0))Solamente eso, este script recibe una fecha como parámetro, y le resta un día, para posteriormente mostrarlo en pantalla Lo que deberías de hacer es dejar el script (*.vbs) en el mismo directorio donde esta el bat (para mayor comodida) o bien llamarlo con la ruta completa agregando una línea más o menos así (en tu bat) cscript/nologo fecha.vbs %date% > fecha.txt Como ves, simplemente lo llamas desde línea de comandos, le pasas una fecha como parámetro, en este caso la de hoy, y el script mostrará en pantalla la fecha -1 día En tu caso puntualmente deberías de redirigir la salida a un archivo temporal (ej: fecha.txt) como he hecho en el ejemplo, ya que de este modo tendrás la fecha en un archivo al que puedes consultar luego desde tu batch. Es decir, con esto almacenas la fecha en un archivo, y luego tu te encargas de acceder a el desde el batch y hacer lo que gustes con el contenido  Espero se haya entendido ... Saludos P.D: igualmente y trás ver este ejemplo (siempre y cuando se haya entendido) espero te entren ganas de aprender algo de vbs, ya que como ves con un par de líneas puedes encontrar la solución a un problemaHola Novlucker, primero que todo agradecerte por tu tiempo; he probado tu código y funciona perfecto en el txt queda la fecha del dia anterior, pero no se como llamar esa fecha desde mi batch y utilizarlo en una variable: yo utilizo for /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set dia=%%a& set mes=%%b& set año=%%c) set nombre=BOG%mes%%dia% para darle el nombre a mi archivo, pero no se como asignarle el mes y dia del txt a las variables, nuevamente gracias por la ayuda.
|
|
|
|
|
En línea
|
|
|
|
|
|
jconnor
Desconectado
Mensajes: 6
|
Hola Novlucker, nuevamente gracias por tu tiempo y por la ayuda, esa era la respuesta, me guié con el post de Leo Gutierrez (gracias a el tambien), pero tenia problemas con la sintaxis del for, no entendia bien el /f o /l , buscando me encontre ésta página: http://www.robvanderwoude.com/ntfor.php y ahi ya todo claro, asi ha quedado mi script: @ECHO OFF CLS ECHO. ECHO COPIA DE SEGURIDAD DE DATOS ECHO. set dia= set mes= set año= set nombre= set cont= ECHO. cscript/nologo fechaS.vbs %date% > fecha.txt ECHO. for /f "tokens=1-3 delims=/" %%a in (fecha.txt) do (set dia=%%a& set mes=%%b& set año=%%c) set nombre=BOG%mes%%dia% cd \ d: cd \ cd copiabog\bd\jord del j*.d* wzunzip -e -o C:\LZHWEB\%nombre%.zip d:\copiabog\bd\jord ECHO. set nombre=SER%mes%%dia% cd \ cd copiaserv\bd\jord del j*.d* wzunzip -e -o C:\LZHWEB\%nombre%.zip d:\copiaserv\bd\jord ECHO. ECHO PROCESO TERMINADO : TIME Gracias nuevamente 
|
|
|
|
|
En línea
|
|
|
|
yelopez
Desconectado
Mensajes: 2
|
Buenas tardes!! tengo el mismo problema que tenia jconnor así que me tome el atrevimiento de probar el script que dejo.. Ahora bien no me funciona porq no me quedo muy claro lo del archivo de vbs y el txt, los cree en el escritorio al igual que mi .bat pero nada  no estoy clara sobre las variable que declaraste.. a todas estas mi petición es: podrías por favor explicar los pasos que seguiste en la creación de tu .bat?? el que en un principio cree es rem Establecemos el juego de caracteres ISO-8859-1 (Latin 1) chcp 28591 > NUL rem variables que se usan set FECHA_ACTUAL=%DATE% set ANO=%FECHA_ACTUAL:~6,4% set MES=%FECHA_ACTUAL:~3,2% set DIA=%FECHA_ACTUAL:~0,2% set va=1 set /a ANT=%DIA%-%va% rem comando para conectarse al servidor remoto, permite loguearse automaticamente NET USE z: \\servidor al que me conecto\nombre del servidor /dominio\usuario clave rem comando para copiar archivo desde un servidor al disco local xcopy \\servidor al que me conecto\carpeta1\carpeta2\carpeta3\AHB%ANO%%MES%%ANT%.mdb C:\donde voy a copiar el archivo rem comando para renombrar el archivo ren C:\donde copie el archivo\AHB%ANO%%MES%%ANT%.mdb nombre_nuevo.mdb endlocal echo. pause Mi problema es la fecha cuando es 01 de cada messs y necesito tomar el del día anterior De antemano gracias por la ayuda, espero haberme explicado!
|
|
|
|
« Última modificación: 2 Junio 2011, 21:08 por yelopez »
|
En línea
|
|
|
|
|
|