Foro de elhacker.net

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:


Código:
@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:

Código:
@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:
Código:
.\Script.cmd "q" w "e" r "  t  " y.

Código:
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
Puedes hacerlo de la siguiente manera:

Código:
@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:
Código:
.\Script.cmd "q" w "e" r "  t  " y.

Código:
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