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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Batch] Como puedo validar la variable? [Solucionado]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Batch] Como puedo validar la variable? [Solucionado]  (Leído 13,074 veces)
Batitoul

Desconectado Desconectado

Mensajes: 2



Ver Perfil
[Batch] Como puedo validar la variable? [Solucionado]
« en: 24 Agosto 2011, 20:58 pm »

Ante todo buenas tardes:
Bueno, en mi trabajo usamos este comando para forzar la expiracion de las cintas en el NetBackup.-
               bpexpdate -m "0662L1" -d 0

Bueno cree la siguiente BAt para automatizarlo.
]@echo Off
color 1A
c:
cls
cd\
cd "C:\Program Files\Veritas\NetBackup\bin\admincmd"
echo Escribe el numero de tape.
echo.
set /p var=
echo.
bpexpdate -m "%var%" -d 0
Echo ¡¡ Felicidades, acabas de forzar la expiracion de la cinta !!
Echo.
pause > nul[td
Aquí viene la duda:
 Como hago para que al escribir la variable %var% solo  permita el ingreso de 6 caracteres, ni un caracter mas ni un caracter menos; solo debe permitir ingresar 6 caracteres alfanuméricos ???
 
agradezco de antemano sus respuestas.



« Última modificación: 5 Septiembre 2011, 00:10 am por Leo Gutiérrez. » En línea

GroK


Desconectado Desconectado

Mensajes: 681


...I have become comfortably numb...


Ver Perfil
Re: Como puedo validar la variable?????
« Respuesta #1 en: 26 Agosto 2011, 04:29 am »

Hola,

Yo haría ese mismo script pero bajo un lenguaje que permitiera el uso de expresiones regulares, como Python o Ruby. Una expresión regular que te serviría sería una sencilla como esta:

Código:
/^\w{6}$/

De modo que matchea 6 y solamente 6 caracteres alfanuméricos (e incluyendo el símbolo de underscore "_". Si es fundamental que ese tampoco esté, pues te creas una clase de caracteres tal que así: [a-zA-Z0-9] y la pones donde estaba \w)

Otra opción es hacer la validación de la cadena llamando al intérprete desde el mismo script bat que ya tienes, y que te devuelva algún valor que luego puedas comprobar en el bat para saber si la cadena introducida es válida o no.

Saludos


En línea

"I put on my Hendrix album and my son said 'Dad, who's that?' and i said 'Well son, that's God' "- Robert Plant

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

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [Batch] Como puedo validar la variable?
« Respuesta #2 en: 26 Agosto 2011, 21:11 pm »

Podrías hacer algo así

Código
  1. @echo off
  2. :menu
  3. set /p "var=:";
  4. if not defined var goto:menu
  5. echo %var% | findstr /r "......$" > nul 2>&1 && (
  6. echo Correcto, 6
  7. rem Demàs còdigo...
  8. ) || (goto:menu)
« Última modificación: 27 Agosto 2011, 07:09 am por Leo Gutiérrez. » En línea

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

Desconectado Desconectado

Mensajes: 13



Ver Perfil
Re: [Batch] Como puedo validar la variable?
« Respuesta #3 en: 4 Septiembre 2011, 06:37 am »

 
OJO...
En w7 esto no funciona:
Código:
"......$"
  ...Esto si... 
Código:
"^.......$"
« Última modificación: 4 Septiembre 2011, 06:40 am por aNT366 » En línea

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

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [Batch] Como puedo validar la variable?
« Respuesta #4 en: 4 Septiembre 2011, 08:22 am »


OJO...
En w7 esto no funciona:
Código:
"......$"
  ...Esto si... 
Código:
"^.......$"

Lo probé en Windows 7 y funciona.
En línea

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

Desconectado Desconectado

Mensajes: 2



Ver Perfil
Re: [Batch] Como puedo validar la variable?
« Respuesta #5 en: 4 Septiembre 2011, 21:08 pm »

Estimados, se pasaron esa ultima respuesta fue la solucion, como un silmple caracter puede hacer ladiferencia.

Este foro si que es de mucha ayuda para nosotros que recien nos iniciamos en esta locura de programar.

 ;-)
En línea

aNT366

Desconectado Desconectado

Mensajes: 13



Ver Perfil
Re: [Batch] Como puedo validar la variable? [Solucionado]
« Respuesta #6 en: 11 Septiembre 2011, 19:46 pm »

Ahora que lo veo el fallo real del script está en basarlo un poco en trucos de la programación o caracteres que como vemos no funcionan en todas la máquinas.

Es infinitamente mejor la lógica. Esto no puede fallar:
Código:
@ECHO OFF
:BUCLE
CLS & ECHO.
SET /p "PASS=INTRODUCE SOLO SEIS CARACTERES:";

SET SW=#%PASS%
SET SW=%SW:~-6%

IF "%SW%" NEQ "%PASS%" GOTO:BUCLE

ECHO. & ECHO  SW:[%SW%]  PASS: [%PASS%] & PAUSE


Modificado que me faltaban unas comillas...
« Última modificación: 11 Septiembre 2011, 21:42 pm por aNT366 » En línea

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

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [Batch] Como puedo validar la variable? [Solucionado]
« Respuesta #7 en: 11 Septiembre 2011, 21:03 pm »

Ahora que lo veo el fallo real del script está en basarlo un poco en trucos de la programación o caracteres que como vemos no funcionan en todas la máquinas.

Es infinitamente mejor la lógica. Esto no puede fallar:
Código:
@ECHO OFF
:BUCLE
CLS & ECHO.
SET /p "PASS=INTRODUCE SOLO SEIS CARACTERES:";

SET SW=######%PASS%
SET SW=%SW:~-6%

IF %SW% NEQ %PASS% GOTO:BUCLE

ECHO. & ECHO  SW:[%SW%]  PASS: [%PASS%] & PAUSE

) || (GOTO:BUCLE)



REM SET SW=%PASS:~0,-6%


A ver, las expresiones regulares no son "trucos de programación", si así lo quieres ver es tu problema, y funcionan en donde sea, están totalmente probadas y funcionan, y no hay que recurrir a una solución artesanal, es mejor usar una expresión regular para este caso:

Código:
C:\Windows\system32>echo hola12 | findstr /r /b ^.......$ && echo ok || echo mal
hola12
ok

C:\Windows\system32>echo hola123 | findstr /r /b ^.......$ && echo ok || echo mal
mal

C:\Windows\system32>echo 123456 | findstr /r /b ^.......$ && echo ok || echo mal
123456
ok

C:\Windows\system32>echo 12345 | findstr /r /b ^.......$ && echo ok || echo mal
mal

C:\Windows\system32>echo lalalax | findstr /r /b ^.......$ && echo ok || echo mal
mal

C:\Windows\system32>echo lalala | findstr /r /b ^.......$ && echo ok || echo mal
lalala
ok

C:\Windows\system32>


A ver, dime, ¿qué problema hay con la lógica ahí?
En línea

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

Desconectado Desconectado

Mensajes: 13



Ver Perfil
Re: [Batch] Como puedo validar la variable? [Solucionado]
« Respuesta #8 en: 11 Septiembre 2011, 21:32 pm »

Amos a ver Leo que no era mi intención  molestar.
Esa solución artesanal es la lógica ( me refiero a la última posteada)

Te daría la razón en lo que dices si realmente tu solución funcionase en cualquier máquina.

Por cierto lo probe en mi xp, otro xp virtualizado, otra máquina con w7...y no funciona en ninguna. Debe ser algo de configuración del teclado, creo yo.

Si por solución artesanal te refieres a lo de "^...." decirte que lo he visto en más de uno de tus scripts.  ( y a mí me funciona ), aunque la última solución posteada  por mí es la que no va a fallar en ningún PC.  ); 

¿ Si no le llamamos truco y no funciona en todos los pcs  como le llamarias ?

Y reiterar que para nada es mi inteción molestar ehhh. Un saludo.

En línea

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

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [Batch] Como puedo validar la variable? [Solucionado]
« Respuesta #9 en: 11 Septiembre 2011, 21:51 pm »


¿ Si no le llamamos truco y no funciona en todos los pcs  como le llamarias ?


Es que debe funcionar en todas las computadoras, porque el patrón es universal, es más, la expresión regular, , funcionaría tanto en Linux, con Perl, con lo que sea...

Código
  1. echo -e "hola12" | grep -E "^......$"

Quizá mi solución no funcionó porque me faltó el ^ y no la probé ...
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

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