[BATCH] Comando WAIT

Iniciado por Meine programmen, 29 Abril 2012, 20:56 PM

0 Miembros y 2 Visitantes están viendo este tema.

Meine programmen

Pues bueno, hice un comando que espera los segundos que necesites. Tambien se puede usar:
ping localhost -n (Numero de segundos) >nul
Pero ultimamente hice programas que esperan mucho, y al final se me ralentizaba el ordenador, y creo que pasa por que ping envia bits, y usando localhost -n creo que te los envias a ti mismo hasta parar tu ordenador. Aqui esta el codigo, es copiarlo y pegarlo en un bloc de notas y guardarlo como "WAIT.BAT" en "C:\Windows\System32". Despues para usarlo solo es:
call wait (Numero de segundos)
Espero que os sea util. Estoy por solucionar el tema del "call". Si no lo usas asi al acabar de ejcutarse el comando se cierra el programa.
@ECHO OFF
SET CONTADOR=0
SET TIEMPO4=%TIME:~9,2%
:1
SET TIEMPO5=
SET TIEMPO6=
SET TIEMPO7=
SET TIEMPO1=%TIME:~0,2%
IF %TIEMPO1% LEQ 9 (SET TIEMPO1=%TIEMPO1:~1,2%)
SET TIEMPO2=%TIME:~3,2%
IF %TIEMPO2% LEQ 9 (SET TIEMPO2=%TIEMPO2:~1,2%)
SET TIEMPO3=%TIME:~6,2%
IF %TIEMPO3% LEQ 9 (SET TIEMPO3=%TIEMPO3:~1,2%)
IF %TIEMPO3%==59 (SET TIEMPO3=0
GOTO MINUTOS) else SET /A TIEMPO3=%TIEMPO3%+1
GOTO CICLO
:MINUTOS
IF %TIEMPO2%==59 (SET TIEMPO2=0
GOTO HORAS) else SET /A TIEMPO2=%TIEMPO2%+1
GOTO CICLO
:HORAS
IF %TIEMPO1%==23 (SET TIEMPO1==0
GOTO CICLO) else SET /A TIEMPO1=%TIEMPO1%+1
:CICLO
IF %TIEMPO1% LEQ 9 (SET TIEMPO5=0)
IF %TIEMPO2% LEQ 9 (SET TIEMPO6=0)
IF %TIEMPO3% LEQ 9 (SET TIEMPO7=0)
IF %TIME:~6,2% LEQ 9 (SET TIEMPO8=%TIME:~6,1%) else SET TIEMPO8=%TIME:~6,2%
SET /A COMP=%TIEMPO3%-%TIEMPO8%
IF "%COMP%"=="-59" (GOTO 4)
IF %TIEMPO3% LSS %TIEMPO8% (SET /A TIEMPO3=%TIEMPO8%+1)
:4
IF "%TIME%"=="%TIEMPO5%%TIEMPO1%:%TIEMPO6%%TIEMPO2%:%TIEMPO7%%TIEMPO3%,%TIEMPO4%" (GOTO FIN) else GOTO CICLO
:FIN
SET /A CONTADOR=%CONTADOR%+1
IF %CONTADOR%==%* (exit /b) else goto 1

Corregi el codigo, y creo que arregle todos los errores. Ademas, el segundo es exacto, por que usa los milisegundos (Aunque algunos piensen que batch es muy lento y que a veces no llegaria en una comprobacion y a la siguiente se pasaria, yo lo probe en mi ordenador y hace 10 comprobaciones por milisegundo, asi que lo lento sera el ordenador, en todo caso.)
REMEMBER! Reality is an illusion, the universe is a hologram, BUY GOLD! BYE!!


ELVJop

Comprueba si coincide? No debe coincidir siempre?

SET /A CONTADOR=0

WTF? No me lei el codigo entero pero no seria mas eficiente y simple no poner nada? Al final del codigo si no me equivoco lo compruebas. Si quitas las comprovaciones y quitas esa linea y sera mas eficiente (Batch ya es lento de por si) Y si no la puedes borrar es incorrecta me parece que seria:

SET Contador=0

set /a es para opeaciones matematicas...
El dia 3 de mayo esta cuenta sera borrada.

Meine programmen

No, no debe de coincidir siempre. No se si me explique bien. Lo que hace es medir un segundo usando la hora del sistema. Y respecto a la linea, es totalmente necesaria. Si no le asigno cero a la variable, fallaria el primer segundo, por que le faltaria un operando en la linea:

SET /A CONTADOR=%CONTADOR%+1

Y lo del /A, la verdad, me dio por ahi y no produce ningun error, asi que bueno, se podria quitar, o no.
REMEMBER! Reality is an illusion, the universe is a hologram, BUY GOLD! BYE!!


ELVJop

Tu que hiciste el codigo explicame estas dos lineas:

SET TIEMPO5=%TIEMPO1%:%TIEMPO2%:%TIEMPO3%,%TIEMPO4%

IF %CONTADOR%==%* (exit /b) else goto 1
El dia 3 de mayo esta cuenta sera borrada.

Meine programmen

Encantado. La primera adapta el resultado al formato de la hora (Hora:minuto:segundo,milisegundo). En esa parte tiene un error que se arreglaria con:
IF %TIEMPO1% LEQ 9 (SET TIEMPO1=0%TIEMPO1%)
Y asi con tiempo2, tiempo3 y tiempo4.
La segunda linea sirve para el numero de segundos. %* seria el numero de segundos que hayas puesto (Mucho lio explicar el tema de los argumentos desde una PSP), y exit /b acaba el comando sin cerrar el programa.
REMEMBER! Reality is an illusion, the universe is a hologram, BUY GOLD! BYE!!


Eleкtro

#5
Hola Meine programmen,

He probado el code varias veces consecutivas, Me dió un error típico al setear incorrectamente una variable, otras veces, al usar "Wait 5" pues tardaba infinitamente, no se detenia a los 5 segundos. Otras veces si que iba, Algún fallo hay por ahí en el code, si quieres revisarlo...

No he querido buscar el error, Porque he simplificado mucho tu code... No quiero chafar tu post, de verdad, Pero esto quizás te sirva para aprender:

Código (dos) [Seleccionar]
@Echo OFF
:: Wait.bat
:: Wait [Segundos]
FOR /L %%G IN (1,1,%1) DO (Ping -n 2 localhost >NUL || Exit /B 1)
Exit /B 0


PD: Consume más recursos realizar todas esas operaciones sin descanso, que usar ping, No te marees por ese tema.

Saludos.








Meine programmen

OWNED, OWNED y REOWNED. Y yo que creia haber hecho algo util  :xD Bueno, yo seguire usando el mio y le buscare los errores (Si no, no tendria sentido haber hecho un esfuerzo). El error ese tambien me ha pasado a mi, y deduzco que el error estara en los milisegundos, asi que tendre que poner algun tipo de margen de error (¿Serviria el comodin "?" en la unidad de los milisegundos?)
REMEMBER! Reality is an illusion, the universe is a hologram, BUY GOLD! BYE!!


Eleкtro

Cita de: Meine programmen en 29 Abril 2012, 22:15 PM
El error ese tambien me ha pasado a mi, y deduzco que el error estara en los milisegundos, asi que tendre que poner algun tipo de margen de error (¿Serviria el comodin "?" en la unidad de los milisegundos?)

Y porque no lo haces directamente sin milisegundos? xD Así te quitas ese problema... No se, De los milisegundos se puede prescindir...

un saludo








Stakewinner00

yo nunca use ping sino choice