Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Nucleorion

#11
en batch basta con crearlas antes de usarlas
#12
numeros y letras.

Ahora con lo aprendido haz pruebas y vete haciendo versiones del programa. Por ejemplo que te pregunte tu nombre y luego que te diga pepito tiene 10526 dias. Si guardas las versiones con nombres diferentes no vas a romper ni perder nada por hacer todas las pruebas que quieras.

#13
La pregunta es bastante basica y generica. Como casi nunca puedo responder a las preguntas complejas aprovechare para hacer mi aportación, y aunque mis conocimientos son limitados si que tengo mucha practica en iniciar a la gente en la programación en mi trabajo. La explicación te servira para cualquier lenguaje de programación, aunque en el ejemplo usaremos batch tal y como preguntas en el asunto. Voy a suponer tambien que has buscado por internet y no has comprendido las respuestas.

Una variable es un lugar donde guardar datos. Imaginemos que quieres hacer un programa que le diga al usuario cuantos dias cumple el dia de su cumpleaños (imaginando para simplificar que todos los años tienen 365 dias). Nuestro programa tendrá que multiplicar los años por los dias del año, pero como los años que tiene el usuario pueden variar le preguntaremos al usuario y los almacenamos en una variable que en este caso le llamaremos aniosusuario.

Crear una variable y darle un valor se hace asi:
Código (dos) [Seleccionar]
set dias=365
Aunque en este caso el valor no varie tiene ciertas ventajas usar variables aquí tambien.

Y para preguntar al usuario cuantos años tiene y almacenar el valor en una variable para operar con ella seria asi:
Código (dos) [Seleccionar]
set /p aniosusuario=Cuantos años has cumplido hoy?

Aqui el programa completo:
Código (dos) [Seleccionar]
@echo off
:inicio
cls
set /p aniosusuario=Cuantos años has cumplido hoy?
set dias=365
set /a resultado=%aniosusuario% * %dias%
echo tienes %resultado% dias
pause
goto inicio


Aqui el programa comentando lo que hace cada linea:
Código (dos) [Seleccionar]
@echo off

REM Ponemos REM para crear un comentario, no tiene incidencia en el programa, es solo para guia del programador

REM Ponemos una etiqueta llamada inicio para que cuando acabe el programa con goto vuelva a inicio y comience de nuevo
:inicio

REM con cls borramos la pantalla cada vez
cls

REM Preguntamos al usuario cuantos años tiene y lo guardamos en la variable años que creamos con set
set /p aniosusuario=Cuantos años has cumplido hoy?

REM creamos la variable dias y le asignamos el valor
set dias=365

REM para operar con las variables creadas ponemos % al principio y al final de la variable
set /a resultado=%aniosusuario% * %dias%

REM aqui mostramos el resultado intercalando el texto con la variable poniendo tambien %
echo tienes %resultado% dias

REM paramos el programa para que el usuario pueda ver el resultado hasta que pulse una tecla
pause

REM volvemos al punto de partida que está en la etiqueta inicio
goto inicio


Consideraciones a tener en cuenta:
Los valores almacenados en las variables se destruyen al cerrar el programa o al recalcular o reasignar los valores.
Los lenguajes de programación no suelen operar internamente con ñ ni acentos por lo que no los usaremos.

PD:
Código (dos) [Seleccionar]

En la previsualizacion, porque la escribir años aparece asi: a& # 241;os y al escribir  a n i o s  aparece asi: años?

Bueno se descompone todo al guardar y luego al previsualizar se vuelve a descomponer asi que no se si se me entendera

#14
Que recopilación tan buena! Gracias!
#15
Hoy me falló de nuevo. Segun la versión de windows parece que es un problema el que no ponga un 0 delante de la hora. A ver si así:

Código (dos) [Seleccionar]

@echo off
echo.
echo El test de conexion a 192.168.1.10 cada 4 segundos ha comenzado
echo.
echo ------------- NO CERRAR ESTA VENTANA -------------


REM Creamos el archivo cada vez que se ejecuta el programa con la fecha y hora en el nombre y la primera linea

set hour=%time:~0,2%
if "%hour:~0,1%" == " " set hour=0%hour:~1,1%
rem echo hour=%hour%
set min=%time:~3,2%
if "%min:~0,1%" == " " set min=0%min:~1,1%
rem echo min=%min%
set secs=%time:~6,2%
if "%secs:~0,1%" == " " set secs=0%secs:~1,1%
rem echo secs=%secs%

set fecha=%Date:~-4%-%Date:~3,2%-%Date:~0,2%
rem set hora=%Time:~0,2%-%Time:~3,2%-%Time:~6,2%
set hora=%hour%-%min%-%secs%

REM Para concatenar y que no de problemas metemos variables y asignacion entre comillas
set nombre=%fecha%_%hora%
echo %nombre%

REM Añadimos el nombre del archivo al archivo que creamos tras >
echo %nombre% > %nombre%.txt

REM Hacemos ping y lo anadimos poniendo la fecha delante linea a linea
:LOOPSTART
    (
      FOR /L %%i in (1,1,1) do (
        <nul (set /p tm=%date% %time:~,-3% )
        rem PING -n 1 192.168.1.10 | FIND "TTL"
        PING -n 1 google.com | FIND "TTL"
        IF ERRORLEVEL 1 ECHO Error, Tiempo de espera agotado. No se ha podido conectar con la IP.
      )
    ) >>%nombre%.txt

REM tiempo que queremos que pase entre ping y ping en segundos
timeout 4 > NUL

GOTO LOOPSTART

pause
#16
Lo de las comillas tampoco ha funcionado. Ahora lleva dos semanas sin fallar despues de añadir los valores al nombre del archivo en dos pasos. Las comillas de momento las he dejado.

Código (dos) [Seleccionar]

echo.
echo El test de conexion a 192.168.1.10 cada 4 segundos ha comenzado
echo.
echo ------------- NO CERRAR ESTA VENTANA -------------


REM Creamos el archivo cada vez que se ejecuta el programa con la fecha y hora en el nombre y la primera linea

set fecha=%Date:~-4%-%Date:~3,2%-%Date:~0,2%
set hora=%Time:~0,2%-%Time:~3,2%-%Time:~6,2%

REM Para concatenar y que no de problemas metemos variables y asignacion entre comillas
set nombre="%fecha%_%hora%"
echo %nombre%

REM Anadimos el nombre del archivo al archivo que creamos tras >
echo %nombre% > %nombre%.txt


REM Hacemos ping y lo anadimos poniendo la fecha delante linea a linea
:LOOPSTART
   (
     FOR /L %%i in (1,1,1) do (
       <nul (set /p tm=%date% %time:~,-3% )
       PING -n 1 192.168.1.10 | FIND "TTL"
       IF ERRORLEVEL 1 ECHO Error, Tiempo de espera agotado. No se ha podido conectar con la IP.
     )
   ) >> %nombre%.txt

REM tiempo que queremos que pase entre ping y ping en segundos
timeout 4 > NUL

GOTO LOOPSTART

pause
#17
Parece que se ha arrglado poniendo entre comillas asignación y variable.

Código (dos) [Seleccionar]
set "nombre=%fecha%_%hora%"

Cuando vea que no falla pongo el script completo
#18
Al probarlo en un ordenador con windows 7 home premium, conectado por wifi, el resultado que tengo es este:

2019-04-01__10-21-53

C:\asisrem\pinglog>(
(set /p tm=01/04/2019 10:21:53  ) 0<nul 
PING -n 1 asisrem.com   | FIND "TTL" 
IF ERRORLEVEL 1 ECHO Error, Tiempo de espera agotado. No se ha podido conectar con la IP.
)
01/04/2019 10:21:53 Respuesta desde 31.47.74.215: bytes=32 tiempo=14ms TTL=52


Hay algun comando del script que no funcione en esa version?
No consigo que imprima el resultado. Me imprime en el txt el propio codigo, mientras que otros ordenadores con windows pro funciona bien.
#19
He tenido problemas al poner 6 variables asisgandolas a otra variable. Se cortaba la asignación y me decia que no se habia podido crear.

Os dejo como ha quedado finalmente con los comentarios del modo anterior para que se entienda mejor.

Código (dos) [Seleccionar]
@echo off

REM Si queremos retrasar el incio del test habilitamos la linea del timeout
REM timeout 240 > NUL

echo.
echo El test de conexion a 192.168.1.10 cada 4 segundos ha comenzado
echo.


REM Creamos el archivo cada vez que se ejecuta el programa con la fecha y hora en el nombre y la primera linea

REM Al poner muchas variables seguidas asignadas a otra variable parece que daba fallo
REM set Any=%Date:~-4%
REM set Mes=%Date:~3,2%
REM set Dia=%Date:~0,2%

REM set Hor=%Time:~0,2%
REM set Min=%Time:~3,2%
REM set Seg=%Time:~6,2%
REM set nombre=%Any%-%Mes%-%Dia%__%Hor%-%Min%-%Seg%

REM Preparamos el nombre del archivo con solo 3 variables para que no de fallo
set fecha=%Date:~-4%-%Date:~3,2%-%Date:~0,2%
set Separador=__
set hora=%Time:~0,2%-%Time:~3,2%-%Time:~6,2%

set nombre=%fecha%%Separador%%hora%
echo %nombre% > %nombre%.txt

REM Hacemos ping y lo anadimos poniendo la fecha delante linea a linea
:LOOPSTART

    (
      FOR /L %%i in (1,1,1) do (
        <nul (set /p tm=%date% %time:~,-3% )
        PING -n 1 192.168.1.10 | FIND "TTL"
        IF ERRORLEVEL 1 ECHO Error, Tiempo de espera agotado. No se ha podido conectar con la IP.
      )
    ) >> %nombre%.txt

REM tiempo que queremos que pase entre ping y ping en segundos
timeout 4 > NUL

GOTO LOOPSTART

pause
#20
Funciona a la perfeccion. Que monton de cosas tiene el Batch que no se. He visto que hay buenos tutoriales aquí. Cuando pueda les dare un repaso.

Eres un crack! Muchas gracias!
;-)

Así queda el programa completo


Código (dos) [Seleccionar]
@echo off
REM Curiosamente si meto el formato de fecha y hora como en la siguiente linea, luego no se repite el loop
rem set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%__%time:~0,2%_%time:~3,2%_%time:~6,2%

REM damos formato a la fecha y la hora y lo guardamos en cada variable
set Any=%Date:~-4%
set Mes=%Date:~3,2%
set Dia=%Date:~0,2%

set Hor=%Time:~0,2%
set Min=%Time:~3,2%
set Seg=%Time:~6,2%

REM Creamos el archivo cada vez que se ejecuta el programa con la fecha y hora en el nombre y la primera linea
set nombre=%Any%-%Mes%-%Dia%__%Hor%-%Min%-%Seg%
echo %nombre% >%nombre%.txt

REM Hacemos ping y lo añadimos poniendo la fecha delante linea a linea

:LOOPSTART

   (
     FOR /L %%i in (1,1,1) do (
       <nul (set /p tm=%date% %time:~,-3% )
       PING -n 1 8.8.8.8 | FIND "TTL"
       IF ERRORLEVEL 1 ECHO Error, Tiempo de espera agotado. No se ha podido conectar con la IP.
     )
   ) >> %nombre%.txt

REM tiempo que queremos que pase entre ping y ping en segundos
timeout 1 > NUL

GOTO LOOPSTART

pause


Y así el archivo que crea


Código (dos) [Seleccionar]
25/01/2019 10:50:26 Respuesta desde 8.8.8.8: bytes=32 tiempo=16ms TTL=119
25/01/2019 10:50:28 Respuesta desde 8.8.8.8: bytes=32 tiempo=14ms TTL=119
25/01/2019 10:50:30 Respuesta desde 8.8.8.8: bytes=32 tiempo=14ms TTL=119
25/01/2019 10:50:32 Error, Tiempo de espera agotado. No se ha podido conectar con la IP.
25/01/2019 10:50:41 Error, Tiempo de espera agotado. No se ha podido conectar con la IP.
25/01/2019 10:50:43 Error, Tiempo de espera agotado. No se ha podido conectar con la IP.
25/01/2019 10:50:45 Respuesta desde 8.8.8.8: bytes=32 tiempo=14ms TTL=119
25/01/2019 10:50:47 Respuesta desde 8.8.8.8: bytes=32 tiempo=14ms TTL=119
25/01/2019 10:50:49 Respuesta desde 8.8.8.8: bytes=32 tiempo=17ms TTL=119
25/01/2019 10:50:51 Respuesta desde 8.8.8.8: bytes=32 tiempo=14ms TTL=119