Ejercicio batch, ayuda

Iniciado por jalbtercero, 28 Enero 2016, 11:17 AM

0 Miembros y 2 Visitantes están viendo este tema.

jalbtercero

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

Eleкtro

#1
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








jalbtercero

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