Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: DA KILLER en 15 Mayo 2010, 15:46 pm



Título: [Batch] Problema con las variables [Solucionado]
Publicado por: DA KILLER 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.





Título: Re: [Batch] Problema con las variantes
Publicado por: DA KILLER en 15 Mayo 2010, 15:47 pm
Ah me olvidaba, me podrían explicar como funciona el comando "~% dp0"

Gracias y saludos


Título: Re: [Batch] Problema con las variantes
Publicado por: flony 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


Título: Re: [Batch] Problema con las variantes
Publicado por: DA KILLER 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.


Título: Re: [Batch] Problema con las variantes
Publicado por: DA KILLER 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.


Título: Re: [Batch] Problema con las variantes
Publicado por: DA KILLER 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


Título: Re: [Batch] Problema con las variantes
Publicado por: leogtz en 15 Mayo 2010, 21:38 pm
Se dicen "variables", primero corrige eso.


Título: Re: [Batch] Problema con las variantes
Publicado por: DA KILLER en 15 Mayo 2010, 21:58 pm
:$ sip, se me pasó por escribir rápido, gracias Leo.

Ya está arreglado.


Título: Re: [Batch] Problema con las variables
Publicado por: leogtz 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".


Título: Re: [Batch] Problema con las variables
Publicado por: DA KILLER 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.


Título: Re: [Batch] Problema con las variables
Publicado por: leogtz en 15 Mayo 2010, 22:31 pm
Son tipos de variables que pueden ser usadas de esta manera:

%~d0

Donde "0" hace referencia al mismo archivo batch.

La letra d, hace referencia al disco (drive)

Si yo hiciera esto:

%~dp1

Estaría haciendo referencia a la variable %1 posicional, más (drive) y el path o la ruta.

Aquí tienes más información:

Código:
http://foro.elhacker.net/scripting/programacion_batch_avanzada_nuevo-t132924.0.html


Título: Re: [Batch] Problema con las variables
Publicado por: xassiz_ en 16 Mayo 2010, 14:04 pm
Para lo de los caracteres especiales te servirá mi script:

http://foro.elhacker.net/scripting/fbat_pequeno_filtro_by_xassiz-t265981.0.html (http://foro.elhacker.net/scripting/fbat_pequeno_filtro_by_xassiz-t265981.0.html)


Título: Re: [Batch] Problema con las variables
Publicado por: DA KILLER en 17 Mayo 2010, 00:38 am
OK el filtro de xassiz me ayudo con los caracteres reservados, pero sigue sin tomarme el if not defined, apenas lo solucione lo posteo completo y corregido.


Título: Re: [Batch] Problema con las variables
Publicado por: flony en 17 Mayo 2010, 00:56 am
tenes razon las variables se ingresan == y no = y tal vez por ahi el declarar las variables se te complique en
Código:
set/p var=Escriba TEST:
y test no sea una variable


Título: Re: [Batch] Problema con las variables
Publicado por: xassiz_ en 18 Mayo 2010, 23:36 pm
, pero sigue sin tomarme el if not defined

La estructura de if not defined es "if not defined variable"
Código:
set variable=hola
if not defined %variable% (echo:Variable no definida)

Así estás haciendo tú, el cmd lo interpreta así:
Código:
set variable=hola
if not defined hola (echo:Variable no definida)

A que me refiero? Que no la tienes que expandir:
Código:
set variable=hola
if not defined variable (echo:Variable no definida)


Título: Re: [Batch] Problema con las variables
Publicado por: flony en 19 Mayo 2010, 00:42 am
Código:
[code@echo off
title EJEMPLO VARIANTES
:menu
echo escriba TEST
set/p var=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

ahi ta funciona eso era lo q te decia, eso si funciona con mayusculael TEST si queres ponelo en minuscula pones lo q sea y no funciona solo TEST


Título: Re: [Batch] Problema con las variables
Publicado por: DA KILLER en 19 Mayo 2010, 03:53 am
No, lo que pasa es que al emplear el filtro de xassiz se pre-define la variable a tratar para el "filtrado" pero es una bolud** arreglarlo, ahora busco el code y la rta.

El code es:

Código:
set "test="&set/p "test= Password: "
for %%a in ("^","&","<",">","|"," ",",") do (set "test=!pass:%%~a=^%%~a!")

Al hacer esto se "pre-define" la variable "test", pero si reemplazamos el 1er "test" por no se "ej" si funciona, EJ:

Código:
set "ej="&set/p "test=Ingrese KILLER: "
for %%a in ("^","&","<",">","|"," ",",") do (set "ej=!test:%%~a=^%%~a!")

Saludos y gracias.

PD: Perdón por no conectarme antes, pero tengo un troyano dando vueltas que me tiene como loco :P


Título: Re: [Batch] Problema con las variables
Publicado por: DA KILLER en 19 Mayo 2010, 03:54 am
Bueno, queda solucionado el tema al menos que alguien no entienda algo más.