Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: q0ok en 29 Mayo 2011, 02:37 AM

Título: Filtro de variable numérica
Publicado por: q0ok en 29 Mayo 2011, 02:37 AM
Mi objetivo es comprobar que la variable 'variable' sólo contenga números.


::Filtro de variable numérica by q0ok
setlocal enabledelayedexpansion
:inicio
set /p "variable=Introduzca su variable: "
if not defined variable (goto:inicio)
::Hallamos la longitud de la cadena de carácteres.
set /a cont=0 & set /a sum=0
call :longitud
echo %sum%
::Comprobamos los carácteres de la variable.
:verify
for %%_ in (0 1 2 3 4 5 6 7 8 9) do (
if "!variable:~%cont%,1!" NEQ %%_ (echo WRONG) else (echo RIGHT)
)
pause>nul
set /a cont+=1
if %cont%==%sum% (
echo fin
pause>nul
exit
) else (
goto:verify
)
:longitud
set "fun=!variable:~%sum%,1!"
if not defined fun (goto:eof)
set /a sum+=1
goto longitud


El problema llega dentro del for en "!variable:~%cont%,1!"... No me aparece el carácter como debería aparecer.

¿Alguna ayudita?

¡Gracias!
Título: Re: Filtro de variable numérica
Publicado por: SuperDraco en 29 Mayo 2011, 04:07 AM
No encuentro el fallo en tu código, pero te dejo otra manera de hacer lo mismo, por si te sirve:


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

set /p "variable=Introduzca su variable: "
if not defined variable (goto:inicio)

call :getLength %variable%
echo %length%
pause>nul



:verify
echo %variable% |findstr "a b c d e f g h i j k l m n ¤ o p q r s t u v w x y z , + - _ ¬ ' = ? ¿ ( ) $ # @ º ª" >nul
If %ERRORLEVEL% EQU 0 (echo WRONG) ELSE (echo RIGHT)


pause>nul
echo fin
pause>nul
exit



:Longitud
:getLength
set /a length+=0
set str=%*
:getLength_2
set "str=%str:~1%" && set /a length+=1
if defined str (goto :getLength_2) || (goto :eof)
Título: Re: Filtro de variable numérica
Publicado por: q0ok en 29 Mayo 2011, 04:17 AM
Gracias pitoloko por tu respuesta. Sí funciona pero me gustaría que si alguien lograse encontrar el error por el que no funciona el código que postee.