Autor
|
Tema: [BATCH] problema con código (solucionado) (Leído 8,314 veces)
|
corax
Desconectado
Mensajes: 220
Primum non nocere
|
Buenas a todos. Estoy intentando desarrollar una nueva herramienta para los ordenadores del trabajo, pero me he encontrado con un par de problemillas. Lo que estoy intentando hacer es un código que haga una acción cada cierto tiempo después de ejecutarlo en un equipo. La idea es que cuando pasen por ejemplo 20 días, como en el ejemplo de abajo, muestre el mensaje por pantalla de que es conveniente hacer un backup de las bases de datos. Lo que se me ha ocurrido para calcular el tiempo ha sido comparar la fecha de creación de un archivo (C:\marca.txt), que se cree la primera vez que se ejecute el programa, y comparar esa fecha con la del sistema. Ese código no me ha dado problemas para funcionar, compara bien las dos fechas. @echo off :recordador1 If not exist "C:\marca.txt" echo >C:\marca.txt & goto recordador2 cd /d "C:\"
call:datos marca.txt
:datos set tmp=%~t1 set /a varanno=%date:~6,4%-%tmp:~6,4% If %varanno% EQU 0 set /a varmes=%date:~3,2%-%tmp:~3,2% If %varanno% EQU 1 set /a varmes=(%date:~3,2%+12)-%tmp:~3,2% If %varanno% GEQ 2 goto:tiempo1 If %varmes% EQU 0 set /a vardia=%date:~0,2%-%tmp:~0,2% If %varmes% EQU 1 set /a vardia=(%date:~0,2%+30)-%tmp:~0,2% If %varmes% GEQ 2 goto:tiempo1 If %vardia% LSS 20 goto:recordador2 If %vardia% GEQ 20 goto:tiempo1
:tiempo1 echo Ya han pasado 22 o más días. echo Por favor, haga un backup de las bases de datos. del /q /f "C:\marca.txt" & echo >C:\marca.txt & goto recordador2
:recordador2 :: más código Sin embargo, el código no funciona como debiera, no sé qué hago mal, pero da fallos al redireccionar a :tiempo y a :recordador2, y no sé qué le pasa. Por otra parte, ¿hay alguna manera más eficiente para saber en qué fecha se empezó a usar el programa sin necesidad de crear un archivo externo y ver su fecha de creación, como he hecho yo? Porque mi método me parece algo tosco. Gracias por adelantado.
|
|
« Última modificación: 28 Octubre 2009, 22:31 pm por corax »
|
En línea
|
Nuestro idioma ha tardado 12 siglos en llegar hasta hoy día. Tú tan sólo tardas 20 segundos en escribir un post: no destroces en tan poco tiempo lo que tantos siglos ha costado crear.
|
|
|
FranciskoAsdf
Desconectado
Mensajes: 231
Ni bueno, ni malo. Solo nada.
|
:recordador1 ) :datos set /a varanno= %date:~6,4%- %tmp:~6,4% If %varanno% EQU 0 set /a varmes= %date:~3,2%- %tmp:~3,2% If %varanno% EQU 1 set /a varmes= (%date:~3,2%+12 )- %tmp:~3,2% If %varmes% EQU 0 set /a vardia= %date:~0,2%- %tmp:~0,2% If %varmes% EQU 1 set /a vardia= (%date:~0,2%+30 )- %tmp:~0,2% :tiempo1 echo Ya han pasado 22 o más días. echo Por favor, haga un backup de las bases de datos. :recordador2 ::::::::::
Lo que hice fue arreglar el primer IF, porque debes usar parentesis despues de la comparacion, los concatenadores se pueden usar pero, por lo menos yo, prefiero usar un par de lineas mas y asegurarme que el cidog funcione bien, y también arreglé los Goto, porke los estabas usando mal... eso saludos y sobre lo de la fecha no tengo idea :B saludos
|
|
|
En línea
|
Asdf debería ser algún tipo de función.
|
|
|
corax
Desconectado
Mensajes: 220
Primum non nocere
|
Gracias, Panxin.boo ...pero a la línea: If not exist "C:\marca.txt" echo >C:\marca.txt & goto recordador2 a mí por lo menos me funciona bien. El problema que da el código es bastante extraño, no sé si es que redirecciona a :tiempo1 y además a :recordador2, si vuelve a leer el código desde el principio, o qué le pasa, pero no redirecciona correctamente. De todas formas, gracias.
|
|
|
En línea
|
Nuestro idioma ha tardado 12 siglos en llegar hasta hoy día. Tú tan sólo tardas 20 segundos en escribir un post: no destroces en tan poco tiempo lo que tantos siglos ha costado crear.
|
|
|
FranciskoAsdf
Desconectado
Mensajes: 231
Ni bueno, ni malo. Solo nada.
|
segun lo que entiendo yo redirecciona como corresponde, a ver para empezar NO puede redireccionar a dos etiquetas a la vez porke solo puedes colocar una, lo que haces es:
si no existe C:\marca.txt crea el archivo marca.txt con un espacio dentro va a la etiqueta :recordador2
pero si existe se mueve a C:\ llama a la etiqueta datos + marca.txt y ahi redirecciona segun corresponda
...
pero no veo que lo haga mal.
saludos
|
|
|
En línea
|
Asdf debería ser algún tipo de función.
|
|
|
corax
Desconectado
Mensajes: 220
Primum non nocere
|
Cuando uso este code de prueba: @echo off :recordador1 If not exist "%homedrive%\marca.txt" ( echo >C:\marca.txt goto :recordador2 ) cd /d "C:\" call:datos marca.txt :datos set tmp=%~t1 set /a varanno=%date:~6,4%-%tmp:~6,4% If %varanno% EQU 0 set /a varmes=%date:~3,2%-%tmp:~3,2% If %varanno% EQU 1 set /a varmes=(%date:~3,2%+12)-%tmp:~3,2% If %varanno% GEQ 2 goto:tiempo1 If %varmes% EQU 0 set /a vardia=%date:~0,2%-%tmp:~0,2% If %varmes% EQU 1 set /a vardia=(%date:~0,2%+30)-%tmp:~0,2% If %varmes% GEQ 2 goto:tiempo1 If %vardia% LSS 20 goto:recordador2 If %vardia% GEQ 20 goto:tiempo1 :tiempo1 echo Ya han pasado 22 o más días. echo Por favor, haga un backup de las bases de datos. del /q /f "C:\marca.txt" echo >C:\marca.txt goto :recordador2 :recordador2 echo estamos en recordador2 & pause>nul La primera vez, muestra por pantalla "estamos en recordador2", porque se limita a crear el archivo y a redirigirse a :recordador2... la 2ª vez que lo ejecuto muestra "estamos en recordador2" "Ya han pasado 22 o más días." "Por favor, haga un backup de las bases de datos." "estamos en recordador2" he llegado a la conclusión del que el 2º "estamos en recordador2" se debe a que desde :tiempo1 también se redirecciona hasta :recordador2, así que es normal que después de un "Ya han pasado 22 o más días, por favor, haga un backup de las bases de datos." venga un "estamos en recordador2". Lo que no es normal es que si de primeras pasa a :recordador2 luego salte a :tiempo1, ese es el fallo No sé qué hacer con este code
|
|
|
En línea
|
Nuestro idioma ha tardado 12 siglos en llegar hasta hoy día. Tú tan sólo tardas 20 segundos en escribir un post: no destroces en tan poco tiempo lo que tantos siglos ha costado crear.
|
|
|
Di~OsK
|
has provado con un exit despues del echo estamos en recordador2 & pause>nul ?? No lo he probado... Solo se me ocurre... No me vallan a asesinar xD Saludos!
|
|
|
En línea
|
Necesitas un servidor de TeamSpeak? Un certificado SSL? MANDA MP
|
|
|
corax
Desconectado
Mensajes: 220
Primum non nocere
|
Debajo del :recordador2 no puedo poner un exit, el código continúa debajo De todas maneras, da igual... ejecuta las instrucciones de las dos etiquetas Y tranquilo, que por lo menos yo no asesino a nadie
|
|
|
En línea
|
Nuestro idioma ha tardado 12 siglos en llegar hasta hoy día. Tú tan sólo tardas 20 segundos en escribir un post: no destroces en tan poco tiempo lo que tantos siglos ha costado crear.
|
|
|
Shinseiki86
Desconectado
Mensajes: 33
Loading...
|
La razón del problema es que el comando call llama un procedimiento y luego retorna al punto donde se ejecutó (soy malo para explicar ) @echo off :recordador1 If not exist "%homedrive%\marca.txt" ( echo >C:\marca.txt goto recordador2 ) else ( cd /d "C:\" call:datos marca.txt )
:datos set tmp=%~t1 set /a varanno=%date:~6,4%-%tmp:~6,4% If %varanno% EQU 0 set /a varmes=%date:~3,2%-%tmp:~3,2% If %varanno% EQU 1 set /a varmes=(%date:~3,2%+12)-%tmp:~3,2% If %varanno% GEQ 2 (goto tiempo1) If %varmes% EQU 0 set /a vardia=%date:~0,2%-%tmp:~0,2% If %varmes% EQU 1 set /a vardia=(%date:~0,2%+30)-%tmp:~0,2% If %varmes% GEQ 2 (goto tiempo1) If %vardia% LSS 20 (goto recordador2) else (goto tiempo1) goto:eof :tiempo1 echo Ya han pasado 22 o m s días. echo Por favor, haga un backup de las bases de datos. del /q /f "C:\marca.txt" echo >C:\marca.txt goto recordador2 :recordador2 echo estamos en recordador2 pause>nul goto:eof
|
|
|
En línea
|
|
|
|
corax
Desconectado
Mensajes: 220
Primum non nocere
|
Sí, el problema debe estar en el call, no estoy familiarizado con él... ¿qué code debo usar para que haga correctamente lo que tiene que hacer? También sigo con la curiosidad por sabre si hay una forma más eficiente de hacer lo de las fechas, lo de saber cuándo empezó a usarse el programa en el equipo. Porque hacer lo del archivo extra este es lo mejor que se me ha ocurrido Toda ayuda es bienvenida
|
|
|
En línea
|
Nuestro idioma ha tardado 12 siglos en llegar hasta hoy día. Tú tan sólo tardas 20 segundos en escribir un post: no destroces en tan poco tiempo lo que tantos siglos ha costado crear.
|
|
|
Shinseiki86
Desconectado
Mensajes: 33
Loading...
|
El code que te coloqué me funciona... no se si es que necesitas algo extra... Ejecutalo y nos contás.
Sobre una forma mas eficaz... la verdad no la veo... Necesitas tener una forma de saber cuando fue la ultima vez que se ejecutó, y eso solo lo haces con un archivo temporal que guarde la fecha... o si no... modificando el registro, creando una entrada que guarde la fecha de la ultima ejecución.. pero tiene inconvenientes: 1. El usuario debe tener permisos para modificar el registro. 2. Modificar el registro puede ser peligroso en manos inexpertas. (Lo es hasta en manos expertas...)
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[solucionado][batch]problema con ó y á
Scripting
|
z_ane_666
|
6
|
8,582
|
3 Enero 2011, 23:26 pm
por klaine
|
|
|
(Solucionado) [Batch] Problema con este caracter especial: !
Scripting
|
SuperDraco
|
4
|
5,295
|
5 Abril 2011, 22:39 pm
por leogtz
|
|
|
[Solucionado] [Batch] Necesitaría saber el error del código.
Scripting
|
sabeeee
|
3
|
3,976
|
22 Julio 2011, 22:58 pm
por sabeeee
|
|
|
(SOLUCIONADO)[Batch] Error en codigo. Ayuda!
Scripting
|
Fran2013
|
2
|
3,755
|
12 Noviembre 2013, 05:40 am
por Fran2013
|
|
|
(solucionado) no consigo hacer funcionar un codigo batch
Scripting
|
hckcrck
|
6
|
4,260
|
17 Junio 2016, 17:47 pm
por hckcrck
|
|