elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [BATCH] problema con código (solucionado)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [BATCH] problema con código (solucionado)  (Leído 7,445 veces)
corax

Desconectado Desconectado

Mensajes: 220


Primum non nocere


Ver Perfil
[BATCH] problema con código (solucionado)
« en: 26 Octubre 2009, 20:52 pm »

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.

Código:
@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 Desconectado

Mensajes: 231


Ni bueno, ni malo. Solo nada.


Ver Perfil WWW
Re: [BATCH] problema con código
« Respuesta #1 en: 26 Octubre 2009, 21:22 pm »

Código
  1. @echo off
  2. :recordador1
  3. If not exist "%homedrive%\marca.txt" (
  4. echo >C:\marca.txt
  5. goto :recordador2
  6. )
  7. cd /d "C:\"
  8. call:datos marca.txt
  9. :datos
  10. set tmp=%~t1
  11. set /a varanno=%date:~6,4%-%tmp:~6,4%
  12. If %varanno% EQU 0 set /a varmes=%date:~3,2%-%tmp:~3,2%
  13. If %varanno% EQU 1 set /a varmes=(%date:~3,2%+12)-%tmp:~3,2%
  14. If %varanno% GEQ 2 goto:tiempo1
  15. If %varmes% EQU 0 set /a vardia=%date:~0,2%-%tmp:~0,2%
  16. If %varmes% EQU 1 set /a vardia=(%date:~0,2%+30)-%tmp:~0,2%
  17. If %varmes% GEQ 2 goto:tiempo1
  18. If %vardia% LSS 20 goto:recordador2
  19. If %vardia% GEQ 20 goto:tiempo1
  20.  
  21. :tiempo1
  22. echo   Ya han pasado 22 o más días.
  23. echo   Por favor, haga un backup de las bases de datos.
  24. del /q /f "C:\marca.txt"
  25. echo >C:\marca.txt
  26. goto :recordador2
  27.  
  28. :recordador2
  29. ::::::::::
  30.  

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 Desconectado

Mensajes: 220


Primum non nocere


Ver Perfil
Re: [BATCH] problema con código
« Respuesta #2 en: 26 Octubre 2009, 21:33 pm »

Gracias, Panxin.boo

...pero a la línea:
Código:
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 Desconectado

Mensajes: 231


Ni bueno, ni malo. Solo nada.


Ver Perfil WWW
Re: [BATCH] problema con código
« Respuesta #3 en: 26 Octubre 2009, 23:23 pm »

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 Desconectado

Mensajes: 220


Primum non nocere


Ver Perfil
Re: [BATCH] problema con código
« Respuesta #4 en: 26 Octubre 2009, 23:59 pm »

Cuando uso este code de prueba:

Código:
@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  :xD
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


Desconectado Desconectado

Mensajes: 903



Ver Perfil WWW
Re: [BATCH] problema con código
« Respuesta #5 en: 27 Octubre 2009, 00:10 am »

has provado con un exit despues del
Código:
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 Desconectado

Mensajes: 220


Primum non nocere


Ver Perfil
Re: [BATCH] problema con código
« Respuesta #6 en: 27 Octubre 2009, 23:13 pm »

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  :xD
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 Desconectado

Mensajes: 33


Loading...


Ver Perfil
Re: [BATCH] problema con código
« Respuesta #7 en: 28 Octubre 2009, 15:20 pm »

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  ;D)

Código:
@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 Desconectado

Mensajes: 220


Primum non nocere


Ver Perfil
Re: [BATCH] problema con código
« Respuesta #8 en: 28 Octubre 2009, 16:05 pm »

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  :silbar:

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 Desconectado

Mensajes: 33


Loading...


Ver Perfil
Re: [BATCH] problema con código
« Respuesta #9 en: 28 Octubre 2009, 18:01 pm »

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

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[solucionado][batch]problema con ó y á
Scripting
z_ane_666 6 8,138 Último mensaje 3 Enero 2011, 23:26 pm
por klaine
(Solucionado) [Batch] Problema con este caracter especial: !
Scripting
SuperDraco 4 4,990 Último mensaje 5 Abril 2011, 22:39 pm
por leogtz
[Solucionado] [Batch] Necesitaría saber el error del código.
Scripting
sabeeee 3 3,684 Último mensaje 22 Julio 2011, 22:58 pm
por sabeeee
(SOLUCIONADO)[Batch] Error en codigo. Ayuda!
Scripting
Fran2013 2 3,391 Último mensaje 12 Noviembre 2013, 05:40 am
por Fran2013
(solucionado) no consigo hacer funcionar un codigo batch
Scripting
hckcrck 6 3,487 Último mensaje 17 Junio 2016, 17:47 pm
por hckcrck
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines