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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  No se esperaba 2 en este momento
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No se esperaba 2 en este momento  (Leído 2,694 veces)
Pukosito

Desconectado Desconectado

Mensajes: 1


Ver Perfil
No se esperaba 2 en este momento
« en: 15 Mayo 2020, 19:40 pm »

Hola buenas, profesionales.

Estoy realizando un ejercicio para clases de SIINF y me he encontrado un problema con el control de errores.

Las directrices a seguir son:

1er argumento: Número entero positivo en base decimal.

2º argumento: Número entero positivo que será la base a la que se quiere convertir el primer argumento. Bases admitidas: [2, 16]

Se debe realizar control de errores.

Hasta el punto donde estoy solo me sale el STDOUT que quiero cuando pongo los dos argumentos, pero no me salen los STDERR deseados cuando no pongo algún parámetro de entrada.

En su lugar me sale que no se espera un 2.

Código:

Código:
if "%1" == "" (
 echo No ha sido introducido un primer argumento.
 echo Por favor, debe introducir dos argumentos para comenzar la ejecucion del script.
 goto :fin
) else (
    if "%2" == "" (
       echo No ha sido introducido un segundo argumento.
       echo Por favor, debe introducir dos argumentos para comenzar la ejecucion del script.
       goto :fin
    ) else (
       if not "%3" == "" (
          echo Ha sido introducido un tercer argumento.
          echo Por favor, debe introducir solamente dos argumentos para comenzar la ejecucion del script.
          goto :fin
       ) else (
          set "arg1="&for /f "delims=0123456789" %%i in ("%1") do set arg1=%%i
          if defined arg1 (
             echo El primer argumento a introducir debe ser un entero y ademas positivo.
             goto :fin
          ) else (
             set "arg2="&for /f "delims=0123456789" %%j in ("%2") do set arg2=%%j
             if defined arg2 (
                echo El segundo argumento a introducir debe ser un entero y ademas positivo.
                goto :fin
             ) else (
                if %2 LSS 2 (
                   echo Ha introducido como segundo argumento un numero menor de 2.
                   echo Debe introducir como segundo parametro un numero entre 2 y 16.
                   goto :fin     
                ) else (
                   if %2 GTR 16 (
                      echo Ha introducido como segundo argumento un numero mayor de 16.
                      echo Debe introducir como segundo parametro un numero entre 2 y 16.
                      goto :fin
                   ) else (
                      echo Los argumentos han sido correctamente introducidos.
                      echo.
                   )
                )
             )
          )
       )
    )
)
:fin
echo.
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
echo + Gracias por utilizar nuestro script: %0 +
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pause
cls

STDERR (cuando no pongo 1 o los 2 argumentos)
Código:
No se esperaba 2 en este momento.

Muchas gracias de antemano :)


En línea

.:Xx4NG3LxX:.

Desconectado Desconectado

Mensajes: 203



Ver Perfil WWW
Re: No se esperaba 2 en este momento
« Respuesta #1 en: 15 Mayo 2020, 21:56 pm »

Utiliza un título más explícito, coloca el lenguaje entre corchetes [ y ].


En línea

"Quizá Batch no sea un lenguaje de programación, pero no obstante deja de ser útil. Asi que no anden diciendo «Que ganas de perder el tiempo»"
EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.176



Ver Perfil
Re: No se esperaba 2 en este momento
« Respuesta #2 en: 15 Mayo 2020, 22:26 pm »

Saludos,

- En tus últimos IF estás haciendo referencia a %2 y pues Batch hace una primera pasada para reemplazar variables, por ejemplo si yo llamo al batch.bat 1 2 3 primero se revisará todo el "programa" actualizando/reemplazando las variables dadas 1 2 3 con %1 %2 %3 respectivamente, luego hace otra pasada para ver si el código no tiene errores y pues tu IF queda malformado si no hay segundo parámetro: IF LSS 2 esto provoca un error fatal.

- Para que no quede vació y no interfiera con la comparación de dos números puedes anteponer un +: IF +%2 LSS 2, o puedes poner un número delante o detrás de ambos miembros: IF %20 LSS 20 IF 5%2 LSS 52, en este último caso puedes tener problemas si antepones el 0 porque esto denotaría un número Octal.

- También podrías evitarte tanto paréntesis ya que estás utilizando saltos exclusivos:

Código
  1. @echo off
  2.  
  3. if [%1]==[] (
  4.  echo No ha sido introducido un primer argumento.
  5.  echo Por favor, debe introducir dos argumentos para comenzar la ejecucion del script.
  6.  goto :fin
  7. )
  8. if [%2]==[] (
  9.  echo No ha sido introducido un segundo argumento.
  10.  echo Por favor, debe introducir dos argumentos para comenzar la ejecucion del script.
  11.  goto :fin
  12. )
  13. if not [%3]==[] (
  14.  echo Ha sido introducido un tercer argumento.
  15.  echo Por favor, debe introducir solamente dos argumentos para comenzar la ejecucion del script.
  16.  goto :fin
  17. )
  18. set "arg1=" & for /f "delims=0123456789" %%i in ("%1") do set arg1=%%i
  19. if defined arg1 (
  20.  echo El primer argumento a introducir debe ser un entero y ademas positivo.
  21.  goto :fin
  22. )
  23. set "arg2=" & for /f "delims=0123456789" %%j in ("%2") do set arg2=%%j
  24. if defined arg2 (
  25.  echo El segundo argumento a introducir debe ser un entero y ademas positivo.
  26.  goto :fin
  27. )
  28. if %20 LSS 20 (
  29.  echo Ha introducido como segundo argumento un numero menor de 2.
  30.  echo Debe introducir como segundo parametro un numero entre 2 y 16.
  31.  goto :fin
  32. )
  33. if %20 GTR 160 (
  34.  echo Ha introducido como segundo argumento un numero mayor de 16.
  35.  echo Debe introducir como segundo parametro un numero entre 2 y 16.
  36.  goto :fin
  37. )
  38.  
  39. echo Los argumentos han sido correctamente introducidos.
  40.  
  41. :fin
  42.  echo.
  43.  echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  44.  echo + Gracias por utilizar nuestro script: %0 +
  45.  echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  46.  cls
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema no se esperaba XXX en este momento [Batch] « 1 2 »
Scripting
ELVJop 12 20,149 Último mensaje 23 Abril 2012, 22:31 pm
por Eleкtro
No se esperaba 0 en este momento
Scripting
amok 0 2,006 Último mensaje 12 Noviembre 2016, 20:39 pm
por amok
Me dice (No se esperaba goto en este momento)(Solucionado)
Scripting
David8choceros8chounos 5 4,100 Último mensaje 2 Marzo 2017, 18:29 pm
por David8choceros8chounos
No se esperaba en este momento. Error [Batch]
Scripting
Fron99 3 4,472 Último mensaje 3 Abril 2017, 12:13 pm
por Fron99
Error: no se esperaba / en este momento
Scripting
Jamjize 4 7,844 Último mensaje 26 Mayo 2017, 21:44 pm
por Jamjize
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines