Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: jalbtercero en 28 Enero 2016, 11:17 AM

Título: Ejercicio batch, ayuda
Publicado por: jalbtercero en 28 Enero 2016, 11:17 AM
Hola, necesito una pequeña ayudita con un batch que no se como hacerlo...
la cosa es que tenemos que hacer un batch que cuente los parametros que le pases desde cmd , te muestre cuantos parametros has introducido y hacer que el usuario pueda elegir que parametro quiere ver. La primera parte y la segunda ya la hice y funcionan bien pero la ultima no se como hacerla. codigo:



@echo off
setlocal enabledelayed expansion
set cuenta=0
for %%i in (%*) do (
           set /a cuenta=!cuenta!+1
)

Has introducido %cuenta% parametros
pause>nul

rem Y aqui la tercera parte donde el usuario puede elegir que parametro desea ver el 1 el 3 o el 58 no importa. No se puede usar for/f.


Gracias
Título: Re: Ejercicio batch, ayuda
Publicado por: Eleкtro en 28 Enero 2016, 11:58 AM
Puedes hacerlo de la siguiente manera:

@Echo Off & SetLocal EnableDelayedExpansion

Set    "values="
Set /A "index=0"

for %%# in (%*) Do (
   Set /A "index+=1"
   Set    "values=!values!!index!"
   Set    "arg!index!=%%~#"
)

Echo:Se han recibido [%index%] argumentos.
Echo+
Choice /C "%values%" /M "Seleccione un argumento..."
Echo:Valor: "!arg%ErrorLevel%!" | More

Pause&Exit /B 0


Resultado de ejecución:
.\Script.cmd "q" w "e" r "  t  " y.

Se han recibido [6] argumentos.

Seleccione un argumento... [1,2,3,4,5,6]?1
Valor: "q"

Presione una tecla para continuar . . .


PD: No se si forma parte del ejercicio pero ten en cuenta que al habilitar la expansión de variables cualquier símbolos de exclamación ! será ignorado en los argumentos recibidos por linea de comandos; para solucionarlo deberías utilizar el comando Call en la asignación de variables (duplicando el símbolo de variable % según la recursividad actual, para que funcione).

Saludos
Título: Re: Ejercicio batch, ayuda
Publicado por: jalbtercero en 28 Enero 2016, 12:17 PM
Cita de: Eleкtro en 28 Enero 2016, 11:58 AM
Puedes hacerlo de la siguiente manera:

@Echo Off & SetLocal EnableDelayedExpansion

Set    "values="
Set /A "index=0"

for %%# in (%*) Do (
   Set /A "index+=1"
   Set    "values=!values!!index!"
   Set    "arg!index!=%%~#"
)

Echo:Se han recibido [%index%] argumentos.
Echo+
Choice /C "%values%" /M "Seleccione un argumento..."
Echo:Valor: "!arg%ErrorLevel%!" | More

Pause&Exit /B 0


Resultado de ejecución:
.\Script.cmd "q" w "e" r "  t  " y.

Se han recibido [6] argumentos.

Seleccione un argumento... [1,2,3,4,5,6]?1
Valor: "q"

Presione una tecla para continuar . . .


PD: No se si forma parte del ejercicio pero ten en cuenta que al habilitar la expansión de variables cualquier símbolos de exclamación ! será ignorado en los argumentos recibidos por linea de comandos; para solucionarlo deberías utilizar el comando Call en la asignación de variables (duplicando el símbolo de variable % según la recursividad actual, para que funcione).

Saludos




@Elektro esta bien pero el problema es que no podemos usar ningun comando o argumento que no hayamos usado en clase como por ejemplo

Choice /C "%values%" /M "Seleccione un argumento..."
%%~# ni esto
| More ni esto tampoco, asi que... pues no se como hacerlo
pero me podrias explicar que hace esto?: %%~#
esto: Echo:Valor: "!arg%ErrorLevel%!" | More, gracias