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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Batch] Se me cae el script
0 Usuarios y 3 Visitantes están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: [Batch] Se me cae el script  (Leído 13,063 veces)
VivaElPirateo

Desconectado Desconectado

Mensajes: 25


Ay dios mío, virgen santísima!!!!!!!!!


Ver Perfil
[Batch] Se me cae el script
« en: 21 Mayo 2012, 00:29 am »

Buenas tardes:

Estoy haciendo un script (.bat), el cual se debe poner las opciones a elegir entre la 1 y la 8. Tengo las opciones para validar que el usuario no pona letras y números que no correspondan, pero, acá va el drama:

Al poner un solo escpacio (presionar aunque sea una vez el botón de la tecla espaciadora), se me cae el programa.

Necesito saber si existiese una opción para validar esto o, en el peor de los casos, deshabilitar la tecla espaciadora en el script punto bat.


Dejo el código por si acaso:

Código
  1. [b]:numeros
  2. set /p "op=Ingrese una opcion:"
  3. if not defined op goto numeros
  4. set "variable=false"
  5. for /f "delims=abcdefghijklmnopqrstuvwxyz" %%a in ("%op%") do set "variable=true"
  6. if "%variable%"=="true" (
  7. if %op% GTR 8 (
  8. echo Ingrese solo numeros del 1 al 8
  9. goto numeros
  10. )
  11. if %op% LSS 1 (
  12. echo Ingrese solo numeros del 1 al 8
  13. goto numeros
  14. )
  15. goto opcion
  16. ) else (
  17. echo No puede ingresar Caracteres.
  18. goto numeros
  19. )[/b]
  20.  

Cualquier ayuda se agradece!!!


« Última modificación: 21 Mayo 2012, 03:15 am por EleKtro H@cker » En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: Se me cae el script
« Respuesta #1 en: 21 Mayo 2012, 02:34 am »

Jeje no necesitas hacer todo eso.. un menu se hace asi:

Código
  1. :menu
  2. cls
  3. echo              1.- Ver datos de autor.
  4. echo              2.- Mirar mensaje.
  5. echo              3.- Salir del programa.
  6. set "opcion="
  7. set /p "opcion= elija a donde desea ir: "
  8. if not defined opcion (goto menu)
  9. if %opcion%==1 (goto :autor)
  10. if %opcion%==2 (goto :mensaje)
  11. if %opcion%==3 (goto :salir)  
  12. goto :menu
  13.  

Con esto queda mejor, porque no muestra ningun mensaje de error, sino que no hace nada.
Lo de set "opcion=" es para que las siguientes veces que vuelva al menu, se borre el contenido de %opcion% para que si el usuario pone enter sin escribir nada, no vaya a donde fue la vez anterior.


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: Se me cae el script
« Respuesta #2 en: 21 Mayo 2012, 03:15 am »

Vaya lio tienes montado... El FOR no es para este tipo de cosas, Ni tampoco es necesario crear cientos de condicionales  :P.
Te recomiendo que leas acerca de los comandos FIND, FINDSTR, y CHOICE.

Otras alternativas de menúes aparte de la que comentó $Edu$:


Menú V.1

Código
  1. @echo off
  2.  
  3. :: Solo son seleccionables del número 1 al 8.
  4. :: Nota: No muestra ningún error al escribir un espacio o "&" "=" o un número diferente.
  5.  
  6. :Select
  7. cls
  8. Set op=NUL
  9. set /p "op=Ingrese una opcion: "
  10. Echo "%OP%" | FINDSTR "\<[1-8]\>" >NUL || (Goto :Select)
  11. Goto :Opcion%OP%
  12.  
  13. :Opcion1
  14. Echo Has elegido la Opcion 1 & pause & Goto :Select
  15. :Opcion2
  16. Echo Has elegido la Opcion 2 & pause & Goto :Select
  17. :Opcion3
  18. Echo Has elegido la Opcion 3 & pause & Goto :Select
  19. :Opcion4
  20. Echo Has elegido la Opcion 4 & pause & Goto :Select
  21. :Opcion5
  22. Echo Has elegido la Opcion 5 & pause & Goto :Select
  23. :Opcion6
  24. Echo Has elegido la Opcion 6 & pause & Goto :Select
  25. :Opcion7
  26. Echo Has elegido la Opcion 7 & pause & Goto :Select
  27. :Opcion8
  28. Echo Has elegido la Opcion 8 & pause & Goto :Select


Menú V.2
Código
  1. @echo off
  2.  
  3. :: Solo son seleccionables del número 1 al 8.
  4. :: No muestra ningún error al escribir un espacio o un número diferente.
  5.  
  6. :Select
  7. cls
  8. CHOICE /C 12345678 /M "Ingrese una opcion: "
  9. Goto :Opcion%Errorlevel%
  10.  
  11. :Opcion1
  12. Echo Has elegido la Opcion 1 & pause & Goto :Select
  13. :Opcion2
  14. Echo Has elegido la Opcion 2 & pause & Goto :Select
  15. :Opcion3
  16. Echo Has elegido la Opcion 3 & pause & Goto :Select
  17. :Opcion4
  18. Echo Has elegido la Opcion 4 & pause & Goto :Select
  19. :Opcion5
  20. Echo Has elegido la Opcion 5 & pause & Goto :Select
  21. :Opcion6
  22. Echo Has elegido la Opcion 6 & pause & Goto :Select
  23. :Opcion7
  24. Echo Has elegido la Opcion 7 & pause & Goto :Select
  25. :Opcion8
  26. Echo Has elegido la Opcion 8 & pause & Goto :Select


« Última modificación: 21 Mayo 2012, 06:20 am por EleKtro H@cker » En línea



VivaElPirateo

Desconectado Desconectado

Mensajes: 25


Ay dios mío, virgen santísima!!!!!!!!!


Ver Perfil
Re: [Batch] Se me cae el script
« Respuesta #3 en: 21 Mayo 2012, 04:45 am »

Tengo lo siguiente hecho:
Código
  1. @echo off
  2. :inicio
  3.  
  4.  
  5. set var=    
  6. set /p var=         Ingrese un numero entre el 1 y el 8 :
  7.  
  8. for /f "tokens=1* delims=12345678" %%a in ("A0%var:"=%") do if not "%%b"=="" echo No sea porfiado, hombre!!!!! ELIJA SOLAMENTE NUMEROS ENTRE EL 1 Y EL 8.
  9. goto inicio
  10.  
  11. if %var%==1 goto opcion1
  12. if %var%==2 goto opcion2
  13. if %var%==3 goto opcion3
  14. if %var%==4 goto opcion4
  15. if %var%==5 goto opcion5
  16. if %var%==6 goto opcion6
  17. if %var%==7 goto opcion7
  18. if %var%==8 goto opcion8
  19. if %var% GTR 8 echo          Error de seleccion: la opcion no es valida (Elija entre 1 y 8)



Con esto logro retener los errores y manda un mensaje de error al usuario, pero no logro que al poner cualquiera de las opciones señalas me envíe ahí hacia ellas.

Qué hago???



Jeje no necesitas hacer todo eso.. un menu se hace asi:

Código
  1. :menu
  2. cls
  3. echo              1.- Ver datos de autor.
  4. echo              2.- Mirar mensaje.
  5. echo              3.- Salir del programa.
  6. set "opcion="
  7. set /p "opcion= elija a donde desea ir: "
  8. if not defined opcion (goto menu)
  9. if %opcion%==1 (goto :autor)
  10. if %opcion%==2 (goto :mensaje)
  11. if %opcion%==3 (goto :salir)  
  12. goto :menu
  13.  

Con esto queda mejor, porque no muestra ningun mensaje de error, sino que no hace nada.
Lo de set "opcion=" es para que las siguientes veces que vuelva al menu, se borre el contenido de %opcion% para que si el usuario pone enter sin escribir nada, no vaya a donde fue la vez anterior.



Al poner en el teclado algo así como:

dsalf kpuyt3iriue4thy7uyudfiuh c   uy8 t48749 kdsur hkethg3uerf34!"·$%&/

El programa se te va a caer: ya te lo boté.
Eso es lo que no quiero.



Los signos = y el &
igual botan ese script.

Alguna idea de cómo solucionar esto???

Millón de gracias por las respuestas!!!


A todo esto: el menú V2 no corre.
« Última modificación: 21 Mayo 2012, 05:38 am por EleKtro H@cker » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: [Batch] Se me cae el script
« Respuesta #4 en: 21 Mayo 2012, 05:32 am »

Código
  1. set /p var=         Ingrese un numero entre el 1 y el 8 :
  2. for /f "tokens=1* delims=12345678" %%a in ("A0%var:"=%") do if not "%%b"=="" echo No sea porfiado, hombre!!!!! ELIJA SOLAMENTE NUMEROS ENTRE EL 1 Y EL 8.

Con esto logro retener los errores y manda un mensaje de error al usuario, pero no logro que al poner cualquiera de las opciones señalas me envíe ahí hacia ellas.

Mal.

VivaElPirateo, Como ya he explicado no necesitas un FOR para delimitar nada ni hacer esas cosas, Lee la respuesta de $Edu$, Que está muy bien explicada y detallada, Y Luego si quieres lee la mia.

Se te han dado 3 soluciones que te sirven, Hacen exactamente lo que pides, Leelas atentamente y aplicalas a tu code, Deja el FOR.


PD: El menú v.2 no te funciona porque usas Windows XP y los parámetros del comando choice cambian.

PD2: Lee las normas.

Salu2
« Última modificación: 21 Mayo 2012, 05:36 am por EleKtro H@cker » En línea



$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: [Batch] Se me cae el script
« Respuesta #5 en: 21 Mayo 2012, 06:16 am »

"Los signos = y el &
igual botan ese script."

Tienes razon, no sabia eso. Pasa tambien en el codigo que dejo elektro.

Tu intencion entonces es hacer que no se cierre la ventana con esos simboles siquiera? no tengo ni idea, pero te digo que queda feo un mensaje de error, mas vale haces como hace mi codigo que no muestra ningun mensaje, solamente no hace nada hasta que ingresa un valor correcto. Solo que a mi codigo tendrias que agregarle la parte para que no se cierre si ingresa & o = y tal vez algun otro simbolo..
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: [Batch] Se me cae el script
« Respuesta #6 en: 21 Mayo 2012, 06:22 am »

"Los signos = y el &
igual botan ese script."

Pasa tambien en el codigo que dejo elektro.

Lo he solucionado con unas comillas dobles xD.

salu2

EDITO: y la misma solución en el code de $Edu$

Código
  1. if "%opcion%"=="1" (goto :autor)
  2. if "%opcion%"=="2" (goto :mensaje)
  3. if "%opcion%"=="3" (goto :salir)  

PD: El problema es que al no cerrar la variable, & se toma como una instrucción del operador, Y no como un string...

salu2
« Última modificación: 21 Mayo 2012, 06:28 am por EleKtro H@cker » En línea



$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: [Batch] Se me cae el script
« Respuesta #7 en: 21 Mayo 2012, 06:35 am »

Jeje tienes razon, ahora si queda bien.
« Última modificación: 21 Mayo 2012, 06:43 am por $Edu$ » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: [Batch] Se me cae el script
« Respuesta #8 en: 21 Mayo 2012, 06:40 am »

Yo le agregue al mio solo una comilla doble, I win :P

Siento decepcionarte, Pero...  :-\ No funciona xD

Al agregarle la comilla donde la has agregado, No se le da ningún valor a la variable, Por eso pongas lo que pongas no da error XD


salu2
En línea



$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: [Batch] Se me cae el script
« Respuesta #9 en: 21 Mayo 2012, 06:44 am »

De que me hablas? no se que habras leido.. yo no puse nada.. jajaja, me voy chauuu
En línea

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
programa batch o script
Scripting
meihan 0 2,121 Último mensaje 28 Junio 2008, 07:05 am
por meihan
Script BATCH BASICO
Scripting
Fx Hound 1 4,364 Último mensaje 15 Mayo 2010, 18:25 pm
por flony
Batch Script Compara IPs
Scripting
Fluflu 3 3,976 Último mensaje 4 Agosto 2010, 14:38 pm
por Eltester
batch q ejecute un script de sql?
Bases de Datos
_CrisiS_ 4 4,110 Último mensaje 11 Noviembre 2011, 21:48 pm
por klaine
Help! Script robocopy en Batch
Scripting
sora_ori 0 2,534 Último mensaje 29 Enero 2013, 21:19 pm
por sora_ori
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines