Curso batch

KYD escribió:Maestro html, creo que deberías de poner otro ejemplo.

Bueno vale, aquí tienes otro ejemplo, esto calcula la tabla de multiplicar que pongas:

@echo off
:ini
echo Que tabla de multiplicar quieres ver?
set /p tabla=
if not defined tabla (
cls
goto ini
)
cls
set contador=0
:multiplica
echo Tabla del %tabla%:
echo.
:bucle
set /a contador=contador+1
set /a temp=tabla*contador
echo %tabla% x %contador% = %temp%
if not %temp%==%tabla%0 (goto bucle) else (
pause > nul
exit
)
Esto me mostrará la tabla de multiplicar que elija?

Desde qué numero y hasta qué numero?

:o :o
Cómo harías para que me muestre las tablas hasta el 15?
pues poniendo la del 15, y hay un fallo, que al multiplicar 1234567890 se multiplica no solo hata 10, esque no acaba, pruebalo
kaotick escribió:pues poniendo la del 15, y hay un fallo, que al multiplicar 1234567890 se multiplica no solo hata 10, esque no acaba, pruebalo

Jaja, es verdad al poner la trabla del 1234567890 nunca acaba de multiplicar... Pero hay muy pocas posibilidades de que alguien ponga esa tabla...
kaotick escribió:yo la puse...ademas al multiplicar una letra tambien pasa eso

@echo off
:ini
echo Que tabla de multiplicar quieres ver?
set /p tabla=
if not defined tabla (
cls
goto ini
)
if %tabla% GTR 999999999999999999999999999999999999999999999999999999999999999999 (goto letra)
if %tabla%==1234567890 (goto secret)
if %tabla%==0123456789 (goto secret)
cls
set contador=0
:multiplica
echo Tabla del %tabla%:
echo.
:bucle
set /a contador=contador+1
set /a temp=tabla*contador
echo %tabla% x %contador% = %temp%
if not %temp%==%tabla%0 (goto bucle) else (
pause > nul
exit
)

:letra
cls
echo Introdujiste una letra...
pause > nul
cls
goto ini

:secret
cls
echo Introdujiste el numero secreto...
echo Enhorabuena!!!!!
pause > nul
cls
goto ini


Con esto están solucionados los dos problemas, y además así hay un huevo de pascua.

Y no creo que alguien ponga un número mayor que 999999999999999999999999999999999999999999999999999999999999999999
WoW, puse muxos 9s y se me volvió loco y no para de calcular a toda velocidad XD
JK3 escribió:WoW, puse muxos 9s y se me volvió loco y no para de calcular a toda velocidad XD

Eso es porque batch no reconoce números tan altos.
OK, bueno el caso es k me parece my chindo volverlo loco XD, me paso escribiendo números randes muxo rato XD, peo una cosa... No me funcionan los núeros negativos XD, me dice k e escrito una letra...
JK3 escribió:OK, bueno el caso es k me parece my chindo volverlo loco XD, me paso escribiendo números randes muxo rato XD, peo una cosa... No me funcionan los núeros negativos XD, me dice k e escrito una letra...

Ya, solo funcionan los normales.

P.D: Pronto continuaré el curso.
Maestro html escribió:
JK3 escribió:OK, bueno el caso es k me parece my chindo volverlo loco XD, me paso escribiendo números randes muxo rato XD, peo una cosa... No me funcionan los núeros negativos XD, me dice k e escrito una letra...

Ya, solo funcionan los normales.

P.D: Pronto continuaré el curso.

Estoy deseando verlo, el batch es uno de mis lenguajes informaticos favoritos...
Yo tampoco creo que alguien ponga un número mayor a ese.

Por otro lado estuve practicando, tratando de hacer uno que no solo multiplique, sino que te dé opciones para sumar, restar y dividir también, y hasta ahora no lo he conseguido. Creo que hay un error en los comandos que pongo. Podrías echarme una mano Html, o incluso tú Kaotick, que al parecer estás experimentado en el tema.

Gracias
KYD escribió:Yo tampoco creo que alguien ponga un número mayor a ese.

Por otro lado estuve practicando, tratando de hacer uno que no solo multiplique, sino que te dé opciones para sumar, restar y dividir también, y hasta ahora no lo he conseguido. Creo que hay un error en los comandos que pongo. Podrías echarme una mano Html, o incluso tú Kaotick, que al parecer estás experimentado en el tema.

Gracias

Se puede hacer algo así:

@echo off
:ini
cls
echo Calculadora
echo.
echo 1.Sumar
echo 2.Restar
echo 3.Multiplicar
echo 4.Dividir
set /p i=Que quieres hacer? 
if not defined i (goto ini)
if %i%==1 (goto sumar)
if %i%==2 (goto restar)
if %i%==3 (goto multiplicar)
if %i%==4 (goto dividir) else (
cls
echo Numero no valido
pause > nul
goto ini
)

:sumar
cls
set /p i=Primer sumando: 
cls
set /p j=Segundo sumando: 
set /a r=i+j
cls
echo Resultado: %r%
pause >nul
exit

:restar
cls
set /p i=Minuendo: 
cls
set /p j=Sustraendo: 
set /a r=i-j
cls
echo Resultado: %r%
pause >nul
exit

:multiplicar
cls
set /p i=Primer factor: 
cls
set /p j=Segundo factor: 
set /a r=i*j
cls
echo Resultado: %r%
pause >nul
exit

:dividir
cls
set /p i=Dividendo: 
cls
set /p j=Divisor: 
set /a r=i/j
cls
echo Resultado: %r%
pause >nul
exit

Saludos.
Maestro html escribió:
KYD escribió:Yo tampoco creo que alguien ponga un número mayor a ese.

Por otro lado estuve practicando, tratando de hacer uno que no solo multiplique, sino que te dé opciones para sumar, restar y dividir también, y hasta ahora no lo he conseguido. Creo que hay un error en los comandos que pongo. Podrías echarme una mano Html, o incluso tú Kaotick, que al parecer estás experimentado en el tema.

Gracias

Se puede hacer algo así:

@echo off
:ini
cls
echo Calculadora
echo.
echo 1.Sumar
echo 2.Restar
echo 3.Multiplicar
echo 4.Dividir
set /p i=Que quieres hacer? 
if not defined i (goto ini)
if %i%==1 (goto sumar)
if %i%==2 (goto restar)
if %i%==3 (goto multiplicar)
if %i%==4 (goto dividir) else (
cls
echo Numero no valido
pause > nul
goto ini
)

:sumar
cls
set /p i=Primer sumando: 
cls
set /p j=Segundo sumando: 
set /a r=i+j
cls
echo Resultado: %r%
pause >nul
exit

:restar
cls
set /p i=Minuendo: 
cls
set /p j=Sustraendo: 
set /a r=i-j
cls
echo Resultado: %r%
pause >nul
exit

:multiplicar
cls
set /p i=Primer factor: 
cls
set /p j=Segundo factor: 
set /a r=i*j
cls
echo Resultado: %r%
pause >nul
exit

:dividir
cls
set /p i=Dividendo: 
cls
set /p j=Divisor: 
set /a r=i/j
cls
echo Resultado: %r%
pause >nul
exit

Saludos.

O.o o.O K LIO O.o o.O
uff kyd no encontre la forma de darte el progrmita ese asique con un poco de retraso pero bueno, ya e solucionao un par de cosillas que iban mal, te pongo aqui el codigo de una agenda que ize, pero es muuuy largo...
@echo off
color 1F
:menu
title Agenda-Menu
cls
echo.
echo 1.Nuevo usuario
echo 2.Login
echo 3.Eliminar usuario
echo 4.Salir
set /p in=Que desea hacer?
if %in%==1 goto reg00
if %in%==2 goto log00
if %in%==3 goto delete
if %in%==4 (goto exit) else echo no se reconoce ese caracter && pause > nul && goto menu

rem FIN MENU--------

:reg00
cls
title Agenda-Nuevo usuario
echo.
echo Ingrese el nombre de nuevo usuario.
set /p name=
echo.
echo Ingrese su password
set /p pass=
goto :reg01
:reg01
title Agenda-Nuevo usuario
cls
mkdir c:\Agenda\%name%\
echo %pass% > c:\Agenda\%name%\%pass%.dat
attrib +h c:\Agenda\%name%\%pass%.dat
echo %name% > c:\Agenda\%name%\%name%.dat
echo Apuntes: > c:\Agenda\%name%\apuntes.txt
attrib +h c:\Agenda\%name%\apuntes.txt
echo Lista de tus resultados de imc > c:\Agenda\%name%\imc.txt
attrib +h c:\Agenda\%name%\imc.txt
echo Lista de procesos terminados > c:\Agenda\%name%\kill.txt
attrib +h c:\Agenda\%name%\kill.txt
echo Usuario creado correctamente.
pause > nul
goto menu

rem FIN REGISTRO------

:log00
cls
title Agenda-Iniciar sesion
echo.
set /p nick=Nombre:
echo.
set /p psw=Contraseña:
if exist C:\Agenda\%nick% (goto log01)
if not exist c:\Agenda\%nick% (echo El nombre de usuario no existe && pause > nul && goto menu)
:log01
If exist c:\Agenda\%nick%\%psw%.dat (goto logmenu)
If not exist c:\Agenda\%nick%\%psw%.dat (echo La contraseña es incorrecta && echo pulse una tecla para volver al menu principal.. && pause > nul&goto menu)

:logmenu
cls
title Agenda-Menu del usuario
echo.
echo 1.Lista de procesos
echo 2.Ver procesos terminados
echo 3.Calcular imc.
echo 4.Ver ultimos imc.
echo 5.Apuntes
echo 6.Apagado rapido.
echo 7.Salir
echo.
set /p sel=Que deseas hacer?
if %sel%==1 goto pro
if %sel%==2 goto v-pro
if %sel%==3 goto c-imc
if %sel%==4 goto l-imc
if %sel%==5 goto apun
if %sel%==6 goto shut
if %sel%==7 (exit) else echo Caracter No reconocido && pause > nul && goto logmenu

:shut
cls
shutdown -s -t 5 -c "Apagado rapido solicitado desde agenda"
echo Pulsa cualquier tecla para cancelar el apagado
pause > nul
shutdown -a
goto logmenu
:pro
cls
tasklist
pause > nul
echo.
set /p mtr= Quieres terminar algun proceso s/n?
if %mtr%==s goto kil
if %mtr%==n (goto logmenu) else echo Caracteer no reconocido && pause > nul && goto logmenu

:kil
set /p mtr0= Escriba el nombre del proceso
taskkill /f /im %mtr0%
echo %mtr0% >> c:\agenda\%nick%\kill.txt

:v-pro
cls
type c:\Agenda\%nick%\kill.txt
pause > nul
goto logmenu
:c-imc
cls
title Agenda-Menu del usuario-Calcular IMC
echo.
echo Escribe tu altura (en cm):
set /p alt=
echo.
echo Pon tu peso (en kg):
set /p kg=
pause > nul
cls
set /a alt0= %alt% * %alt%
set /a kg0=%kg% * 10000
set /a imc= %kg0% / %alt0%
echo Tu imc es de %imc%
echo tu imc fue %imc% >> c:\Agenda\%nick%\imc.txt
pause > nul
goto logmenu

:apun
cls
type C:\Agenda\%nick%\apuntes.txt
echo.
echo.
echo.
set /p n-apun=Quieres editar tu puntes S/N?
if %n-apun%==S goto star
if %n-apun%==N goto logmenu else echo Caracter no reconocido && pause && goto logmenu
:star
start c:\Agenda\%nick%\apuntes.txt
goto logmenu
:l-imc
cls
type c:\Agenda\%nick%\imc.txt
goto logmenu

rem FIN LOGIN-------

:delete
cls
echo.
echo Alerta, al borrar el usurio borrara toda la informacion.
set /p nam=Nombre
set /p pas=password
if exist c:\agenda\%nam% goto delet00
if not exist c:\Agenda\%pas% echo No existe usuario con ese nombre && pause && goto menu

:delet00
if exist c:\Agenda\%nam%\%pas%.dat goto delet01
if not exist c:\Agenda\%nam%\%pas%.dat echo No coincide la contraseña && pause && goto menu

:delet01
rd /s /q c:\Agenda\%nam%
echo Archivos eliminados.Pulse cualquier tecla para continuar.
pause > nul
goto menu
:exit
exit
lo que mas me gusta es usar el apagado rapido xD no tarda na en apagarse y se apaga bien.
Maestro html, Gracias por la calculadora. Algo así quería.
Solo le haré unos cambios para que pueda volver al menú después de la operación.
Kaotick, muy genial tu programa.
Me has dejado sorprendido.
Es realmente genial, me fascina todo lo que hace incluso guardar en memoria a los usuarios.

Gracias.
KYD escribió:Kaotick, muy genial tu programa.
Me has dejado sorprendido.
Es realmente genial, me fascina todo lo que hace incluso guardar en memoria a los usuarios.

Gracias.

Yo hice una agenda con usuarios y administradores, pero el ordenador donde la tengo se ha estropeado, cuando lo arreglen lo postearé.
Genial, espero entonces maestro html.

Por cierto, ¿Cuándo das la siguiente lección?
kaotick escribió:administradores???

Me refiero a que un usuario sea administrador de la agenda y pueda administrarla (nunca mejor dicho :lol: )
Aquí está la agenda:
@echo off
rem TODOS LO DERECHOS RESERVADOS
title Agenda 1.0 by Maestro Html * TODOS LOS DERECHOS RESERVADOS
:comprov1
if exist "%homedrive%\agenda_data" goto comprov1ok
if not exist "%homedrive%\agenda_data" goto comprov1fail

:comprov1fail
mkdir "%homedrive%\agenda_data"
attrib +h "%homedrive%\agenda_data"
goto comprov2

:comprov1ok
goto comprov2

:comprov2
if exist "%homedrive%\agenda_data\usuarios" goto comprov2ok
if not exist "%homedrive%\agenda_data\usuarios" goto comprov2fail

:comprov2fail
mkdir "%homedrive%\agenda_data\usuarios"
attrib +h "%homedrive%\agenda_data\usuarios"
goto register1

:comprov2ok
goto menu1

:register1
title Registrar usuario
cls
set /p nombreuser= Cual sera tu nombre? 
cls
set /p passuser= Cual sera tu password?
cls
mkdir "%homedrive%\agenda_data\usuarios\%nombreuser%"
mkdir "%homedrive%\agenda_data\usuarios\%nombreuser%\pass_%passuser%"
attrib +h "%homedrive%\agenda_data\usuarios\%nombreuser%"
attrib +h "%homedrive%\agenda_data\usuarios\%nombreuser%\pass_%passuser%"
mkdir "%homedrive%\agenda_data\usuarios\%nombreuser%\admin"
attrib +h "%homedrive%\agenda_data\usuarios\%nombreuser%\admin"
cls
echo Como eres el primer usuario de la agenda seras el administrador.
echo El administrador es el unico que puede acceder a la configuracion de la agenda
pause
goto menu1

:menu1
title Agenda 1.0 by Maestro Html * TODOS LOS DERECHOS RESERVADOS
cls
echo                              1.Log In
echo                              2.Configuracion agenda
echo                              3.Registrarse
echo                              4.Salir
set /p menu1=   Que quieres hacer? (pon el numero correspondiente) 
if %menu1%==1 goto login
if %menu1%==2 goto config
if %menu1%==3 goto register
if %menu1%==4 exit
cls
echo Opcion no valida
pause
goto menu1

:login
title Login
cls
set /p userlogin= Usuario: 
cls
set /p userpass= Password: 
cls
goto comprov3

:comprov3
if exist "%homedrive%\agenda_data\usuarios\%userlogin%" goto comprov3ok
if not exist "%homedrive%\agenda_data\usuarios\%userlogin%" goto comprov3fail

:comprov3fail
cls
echo Ese usuario no existe...
echo Pero puedes registrarlo en el menu
pause
goto menu1

:comprov3ok
cls
if exist "%homedrive%\agenda_data\usuarios\%userlogin%\pass_%userpass%" goto menuuser
if not exist "%homedrive%\agenda_data\usuarios\%userlogin%\pass_%userpass%" goto comprov3fail

:comprov3fail
cls
echo Password incorrecto
pause
goto menu1

:menuuser
title Bienvenido %userlogin%
cls
echo                              Bienvenido %userlogin%
echo                                1.Agregar contacto
echo                                2.Ver contacto
echo                                3.Borrar contacto
echo                                4.Salir
set /p menuuser=         Que quieres hacer? (pon el numero correspondiente) 
if %menuuser%==1 goto agregar
if %menuuser%==2 goto ver
if %menuuser%==3 goto borrar
if %menuuser%==4 goto menu1
cls
echo Opcion no valida
pause
goto menuuser

:agregar
title Agregar contacto
cls
set /p nombrecont= Nombre: 
cls
set /p apellido1cont= Primer Apellido: 
cls
set /p apellido2cont= Segundo Apellido: 
cls
set /p email= E-mail: 
cls
set /p telefono= Telefono: 
cls
set /p observaciones= Observaciones / datos adicionales: 
cls
cd "%homedrive%\agenda_data\usuarios\%userlogin%"
echo Nombre: %nombrecont% >> %nombrecont%.txt
echo Primer apellido: %apellido1cont% >> %nombrecont%.txt
echo Segundo apellido: %apellido2cont% >> %nombrecont%.txt
echo E-mail: %email% >> %nombrecont%.txt
echo Telefono: %telefono% >> %nombrecont%.txt
echo Observaciones / datos adicionales: %observaciones% >> %nombrecont%.txt
cls
echo Contacto agregado!
pause
goto menuuser

:ver
cls
title Ver contacto
set /p contacto= Introduzca el nombre de pila del contacto: 
cls
cd "%homedrive%\agenda_data\usuarios\%userlogin%"
type %contacto%.txt
pause
goto menuuser

:borrar
cls
title Borrar contacto
set /p contacto= Introduzca el nombre de pila del contacto: 

:borrarcon
cls
set /p confirmacion= Esta seguro de que que quiere borrar a %contacto%? (s/n) 
if %confirmacion%==s goto borrarsi


if %confirmacion%==n goto menuuser
cls
echo Solo introduzca s o n
pause
goto borrarcon

:borrarsi
erase "%homedrive%\agenda_data\usuarios\%userlogin%\%contacto%.txt"
cls
echo El contacto %contacto% ha sido borrado.
pause
goto menuuser

:config
cls
echo Aqui solo pueden entrar administradores
set /p userlogin= Usuario:
cls
echo Aqui solo pueden entrar administradores
set /p userpass= Password: 
cls

:comprov4
if exist "%homedrive%\agenda_data\usuarios\%userlogin%" goto comprov4ok
if not exist "%homedrive%\agenda_data\usuarios\%userlogin%" goto comprov4fail

:comprov4fail
cls
echo Ese usuario no existe...
pause
goto menu1

:comprov4ok
cls
if exist "%homedrive%\agenda_data\usuarios\%userlogin%\pass_%userpass%" goto comprov5
if not exist "%homedrive%\agenda_data\usuarios\%userlogin%\pass_%userpass%" goto comprov4fail

:comprov4fail
cls
echo Password incorrecto
pause
goto menu1

:comprov5
if exist "%homedrive%\agenda_data\usuarios\%userlogin%\admin" goto menuadmin
if not exist "%homedrive%\agenda_data\usuarios\%userlogin%\admin" goto comprov5fail

:comprov5fail
cls
echo Tu no eres administrador! Solo los administradores pueden acceder aqui!
pause
goto menu1

:menuadmin
title Bienvenido %userlogin%
cls
echo                              Bienvenido %userlogin%
echo                                  1.Ver usuarios
echo                                2.Eliminar usuarios
echo                                 3.Eliminar agenda
echo                                   4.Salir
set /p menuadmin=                Que quieres hacer? (pon el numero correspondiente) 
if %menuadmin%==1 goto verusers
if %menuadmin%==2 goto eliminarusers
if %menuadmin%==3 goto eliminaragenda
if %menuadmin%==4 goto menu1
cls
echo Opcion no valida
pause
goto menuadmin

:verusers
cls
title Ver usuarios
cd "%homedrive%\agenda_data\usuarios\"
echo Abajo se mostraran los usuarios en la columna mas a la derecha
dir /a:d
pause
goto menuadmin

:eliminarusers
title Eliminar usuarios
cls
set /p usuario= Que usuario quiere eliminar? 
:eliminaruserscon
cls
set /p confirmacion= Esta seguro de que que quiere borrar a %usuario%? (s/n) 
if %confirmacion%==s goto eliminarusersi
if %confirmacion%==n goto menuadmin
cls
echo Solo introduzca s o n
pause
goto eliminaruserscon

:eliminarusersi
cls
if not exist "%homedrive%\agenda_data\usuarios\%usuario%" goto noexiste
attrib -h "%homedrive%\agenda_data\usuarios\%usuario%"
rd "%homedrive%\agenda_data\usuarios\%usuario%" /S /Q
cls
echo El usuario %usuario% ha sido borrado.
pause
goto menuadmin

:noexiste
cls
echo Ese usuario no existe
pause
goto menuadmin

:eliminaragenda
title Eliminar agenda
cls
echo ATENCION! Si elimina la agenda se eliminaran todos los usuarios, incluso el administrador
set /p confirmacion= Esta seguro de que que quiere borrar la agenda? (s/n) 
if %confirmacion%==s goto eliminaragendasi
if %confirmacion%==n goto menuadmin
cls
echo Solo introduzca s o n
pause
goto eliminaragenda

:eliminaragendasi
cls
attrib -h "%homedrive%\agenda_data"
rd "%homedrive%\agenda_data" /S /Q
cls
echo La agenda ha sido borrada.
pause
exit

:register
title Registrar usuario
cls
set /p nombreuser= Cual sera tu nombre? 
cls
set /p passuser= Cual sera tu password?
cls
mkdir "%homedrive%\agenda_data\usuarios\%nombreuser%"
mkdir "%homedrive%\agenda_data\usuarios\%nombreuser%\pass_%passuser%"
attrib +h "%homedrive%\agenda_data\usuarios\%nombreuser%"
cls
echo Ahora ya puedes loguearte
pause
goto menu1
 



Saludos
Capítulo 4 - Redireccionadores

En este capítulo voy a enseñar los redireccionadores, es decir, pasar un texto a un archivo.

Si queremos escribir "hola" en el archivo curso.txt, se haria así:

echo hola > curso.txt

ó:

echo hola >> curso.txt

Siempre se tiene que poner un echo delante para pasar un texto a un archivo.

Y... ¿Qué diferencia hay entre > y >>?
Pues esta: Con > se borra todo lo que pudiera ya haber escrito en el archivo y agrega el nuevo contenido y con >> se respeta tod lo que pudiera haber anteriormente en el archivo y se añade a otra línea sin borrar lo anterior.

Ejemplo:
@echo off
set /p escrito=Que quieres escribir?
cls
set /p archivo=En que archivo quieres escribirlo? (la extension sera txt) 
cls
set /p borrar=Borrar lo que hubiera escrito en el archivo? 
if /i %borrar%==si (goto si)
rem el modificador /i hace que no distinga entre mayúsculas y munúsculas, por lo que da igual que el usuario ponga Si que si.
echo %escrito% >> %archivo%.txt
cls
echo Ok!
pause > nul
exit

:si
echo %escrito% > %archivo%.txt
cls
echo Ok!
pause > nul
exit

Si teneis alguna duda posteadla.

Hasta el próximo capítulo, el for.

ATENCIÓN: El for es muy difícil para alguen que no sepa lo suficiente de batch, recomiendo saberse muy bien las anteriores lecciones antes de pasar al siguiente capítulo (cuando lo postee).

Saludos.

Conseguiste la agenda muy rápido.
Realmente está genial.
Gracias por publicarla.