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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Batch] Problema con las variables [Solucionado]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Batch] Problema con las variables [Solucionado]  (Leído 13,161 veces)
DA KILLER

Desconectado Desconectado

Mensajes: 85


Solo sé que no sé nada...


Ver Perfil
[Batch] Problema con las variables [Solucionado]
« en: 15 Mayo 2010, 15:46 pm »

Hola, me encuentro con dos pequeños problemas.

Primer Problema:

No encuentro que estoy haciendo mal al tratar de que cuando una variable no esta definida vaya a un label, en lugar de ello el batch colapsa.

Segundo Problema:

Me gustaría que cuando el usuario inserte el valor de una variable no pueda insertar determinados caracteres que conllevan al colapso del batch.

Dejo el code para que se entienda mejor:

Código:
@echo off
title EJEMPLO VARIANTES
:menu
set/p var=Escriba TEST:
if %var%==TEST (goto Ok) else (goto wrong)
if %var% not defined goto error

:error
echo Ud. no inserto texto alguno, por favor escriba TEST.
pause >nul
cls
goto menu

:wrong
echo ERROR UD. NO INSERTO TEST, por favor vuelva a intentarlo.
pause >nul
cls
goto menu

:Ok
echo OK, todo en orden.
pause >nul
cls
exit

El Primer Problema:

No se porque cuando le doy Enter a la primera vez, es decir sin definir %var% en lugar de ir a error se cierra el programa.

Probé de hacer lo siguiente:

-> Cambiar el orden del "if not defined"

Código:
if not defined %var% goto error

-> Sacar los "%"

Código:
if var not defined goto error
Código:
if not defined var goto error

Y ninguno me funcionó.

El Segundo Problema:

Mi intención es que si el usuario inserta alguno de los sig. caracteres el programa no colapse:

CARACTERES: & >< |

Así como si el usuario ingresa un espacio dentro del texto tampoco lo haga.

Para esto intente lo siguiente:

-> Poner comillas dobles en la variante (como cuando de trabaja con rutas)

Código:
set/p "var=Escriba TEST:" 

-> Poner "^" después del texto (como cuando se quiere ingresar caracteres reservados [EJ: ^&])

Código:
set/p var=Escriba TEST: ^

Así me devolvió: "if ==TEST (goto Ok) else (goto wrong)", y al insertar un caracter colapsó.

Código:
set/p "var=Escriba TEST: "^

Al hacer esto no me devolvió la cadena, pero igual colapsa.

Espero mi duda sea entendible.

Desde Ya gracias por su ayuda.





« Última modificación: 19 Mayo 2010, 03:54 am por DA KILLER » En línea

.: DA KILLER :.


DA KILLER

Desconectado Desconectado

Mensajes: 85


Solo sé que no sé nada...


Ver Perfil
Re: [Batch] Problema con las variantes
« Respuesta #1 en: 15 Mayo 2010, 15:47 pm »

Ah me olvidaba, me podrían explicar como funciona el comando "~% dp0"

Gracias y saludos


En línea

.: DA KILLER :.


flony


Desconectado Desconectado

Mensajes: 584



Ver Perfil
Re: [Batch] Problema con las variantes
« Respuesta #2 en: 15 Mayo 2010, 18:18 pm »

el primer problema es que pones
Código:
set/p var=Escriba TEST:
deberia ser
Código:
 echo escriba TEST para ingresar
set/p var=TEST
solo estaba mal declarada..el tema de los signos al no ser la variable ddeclarada lo envia a  wrong y listo
« Última modificación: 15 Mayo 2010, 18:21 pm por flony » En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
DA KILLER

Desconectado Desconectado

Mensajes: 85


Solo sé que no sé nada...


Ver Perfil
Re: [Batch] Problema con las variantes
« Respuesta #3 en: 15 Mayo 2010, 20:54 pm »

el primer problema es que pones
Código:
set/p var=Escriba TEST:
deberia ser
Código:
 echo escriba TEST para ingresar
set/p var=TEST
solo estaba mal declarada..el tema de los signos al no ser la variable ddeclarada lo envia a  wrong y listo

No me has entendido, ademas lo que va luego del igual es un texto sin valor, si tu te fijas al poner ese codigo te saldrá:
Código:
escriba TEST para ingresar
TEST
Y lo de los signos es que son caracteres de redireccionamiento lo que causa que el programa colapse.
En línea

.: DA KILLER :.


DA KILLER

Desconectado Desconectado

Mensajes: 85


Solo sé que no sé nada...


Ver Perfil
Re: [Batch] Problema con las variantes
« Respuesta #4 en: 15 Mayo 2010, 21:06 pm »

Lo que tu dices es declarar una variable fija [EJ: set test==TEST]
Lo que yo digo son errores que causa el usuario cuando se le pide que ingrese un valor, y por error ingresa un símbolo de redireccionamiento.

Para que me entiendas copia este code:

Código:
@echo off
set ej==Texto de ejemplo
echo Lo que tu quieres hacer es dar un valor FIJO, como lo es la variable "ej":
echo.
echo %ej%
echo.
echo Lo que YO quiero hacer es pedir al usuario un valor, como en la variable "test":
echo.
set/p test=Introduzca un numero:
echo.
echo Ud. ha ingresado %test%
echo.
pause >nul

Ahora fijate que pasa si cuando te pide un numero tu pones cualquiera de estos símbolos: > < | &
O que pasa cuando insertas dos números separados por un espacio: 1 0

Si quieres ahorrar tiempo, el programa colapsa.

Por ello yo quiero que el usuario NO PUEDA utilizar dichos símbolos.
En línea

.: DA KILLER :.


DA KILLER

Desconectado Desconectado

Mensajes: 85


Solo sé que no sé nada...


Ver Perfil
Re: [Batch] Problema con las variantes
« Respuesta #5 en: 15 Mayo 2010, 21:15 pm »

Miren el codigo sería algo así:

Código:
@echo off
title ERROR CON LAS VARIABLES
echo  -= Inserte "KILLER" =-
echo.
Set/p test=
if %test%==KILLER (goto OK) else (goto wrong)
if %test% not defined goto ERROR
:error
cls
echo No insertaste texto, vuelve a intentarlo.
pause >nul
cls
goto menu
:OK
cls
echo OK, Lo hiciste bien
pause >nul
exit

:wrong
cls
echo No insertaste KILLER
pause >nul
cls
goto menu

Los errores están más arriba

PD: Casi me olvido, por si influye trabajo con DOS v 5.1.2600 - Windows XP Profesional 2002 SP 2

De nuevo gracias por su tiempo
En línea

.: DA KILLER :.


leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [Batch] Problema con las variantes
« Respuesta #6 en: 15 Mayo 2010, 21:38 pm »

Se dicen "variables", primero corrige eso.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
DA KILLER

Desconectado Desconectado

Mensajes: 85


Solo sé que no sé nada...


Ver Perfil
Re: [Batch] Problema con las variantes
« Respuesta #7 en: 15 Mayo 2010, 21:58 pm »

:$ sip, se me pasó por escribir rápido, gracias Leo.

Ya está arreglado.
« Última modificación: 15 Mayo 2010, 22:00 pm por DA KILLER » En línea

.: DA KILLER :.


leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [Batch] Problema con las variables
« Respuesta #8 en: 15 Mayo 2010, 22:16 pm »

No he leído la totalidad del post, pero respecto a la duda principal:

Citar
No encuentro que estoy haciendo mal al tratar de que cuando una variable no esta definida vaya a un label, en lugar de ello el batch colapsa.

Eso lo puedes hacer con if, mira:

Código:
if not defined variable (goto:label)

Aquí no es necesario los % %.

A lo segundo, ya se ha hablado bastante en el foro sobre filtros Batch.

Busca sobre "anti batch inyection".
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
DA KILLER

Desconectado Desconectado

Mensajes: 85


Solo sé que no sé nada...


Ver Perfil
Re: [Batch] Problema con las variables
« Respuesta #9 en: 15 Mayo 2010, 22:19 pm »

Ah OK, me faltaban los paréntesis, luego leo el otro tutorial, y me gustaría que me aclares lo del comando "~% dp0"

Gracias y saludos.
En línea

.: DA KILLER :.


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

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines