Comunidad Underground Hispana  

Retroceder   Comunidad Underground Hispana > Programacion > Batch


Respuesta Crear Nuevo Tema
 
Compartir en twitter LinkBack Herramientas Desplegado
Antiguo 24-jun-2009, 18:56   #1
Un poco vago y
 
Avatar de SmartGenius
 
Fecha de Ingreso: mayo-2009
Ubicación: En otro planeta
Amigos 5
Mensajes: 354
Gracias: 0
Agradecido 113 veces en 31 mensajes.
Predeterminado [G]Parametros y Argumentos

Cree este tema para solucionar algunas dudas con respecto al tema de Parametros y Argumentos, y como complemento al tema de EI:

[Solo usuarios registrados pueden ver los links. REGISTRARSE]



Primero que todo,

[Solo usuarios registrados pueden ver los links. REGISTRARSE]



Ahora, en el

[Solo usuarios registrados pueden ver los links. REGISTRARSE]

se habla un poco acerca de dichos parametros...

Cita:
Parámetros pasados al script batch

El signo % seguido de un número (del 1 al 9) son las parámetros que se pasaron al invocar nuestro archivo bat. Por ejemplo si tenemos un archivo saludo.bat con la línea echo Hola %1, si lo invocamos tecleando "saludo.bat pepe" presentará en pantalla "Hola Pepe". Se usa por ejemplo para pasar nombres de ficheros a un bat que se encarga de borrarlos, moverlos, etc.

El signo %0 representa el nombre del archivo bat en ejecución. El signo %* representa todos los parámetros que se le pasaron.

::cancelamos el eco para que no moleste
@echo off
::mostramos la ruta y el nombre de este bat
echo estas ejecutando el archivo %0
::si se nos paso algun parametro, lo mostramos
if not "%1"=="" (
echo pasate el/los parametro/s %*
) else (
echo no pasaste ningun argumento al programa
)
::espera que se pulse una tecla para terminar
pause
Despues pasamos al Manual de Programacion Batch Avanzado de SDC, donde tambien se habla algo acerca de los argumentos, con un ejemplo de su uso, mas un nuevo comando...

Cita:
Los argumentos que recibe un batch, son recibidos de la siguiente forma:

batch argumento1 dos tres

hara que:
%0 = batch
%1 = argumento1
%2 = dos
%3 = tres

en %0 se guardara, el nombre del archivo.

Podemos borrar el contenido de un parametro con el comando shift:

Código:

@echo off
echo %0 %1 %2 %3
shift /1
echo %0 %1 %2 %3

al llamar:

Código:

C:\Documents and Settings\Administrador\tempcurso>astring 123 456 789
astring 123 456 789
astring 456 789

shift borro, el primer argumento.
Luego mas o menos vamos entendiendo el concepto, pero hay algo que tenemos que tener en cuenta...

Un Argumento es todo aquel dato o valor que es pasado a un programa, en una ejecucion o llamada a una funcion, y cuyo valor sera asignado a una variable estatica, a la cual se puede acceder en cualquier momento de dicha ejecucion, estas variables ya estan preestablecidas y varian en cada lenguaje, en batch estan dadas por el simbolo de porcentaje "%" y un numero del 0 al 9, en donde el

[Solo usuarios registrados pueden ver los links. REGISTRARSE]



Eln Batch se acepta directamente un maximo de 9 argumentos, aunque como se dice mas arriba se puede acceder a mas argumentos realizando un desplazamiento de los mismos eliminando uno o mas usando el comando SHIFT.

Comunmente se confunden a los argumentos con lo parametros, pero a mi concepto son algo diferentes, los argumentos como ya se dijo son algunos valores que podemos usar para trabajar con datos, mientras que los parametros serian las especificaciones que le damos a nuestro programa para que trabaje y trate de diferente manera a nuestros datos...

Ej -->>

[Solo usuarios registrados pueden ver los links. REGISTRARSE]



Ese Script recibe como primer argumento (%1) un parametro que le indicara que funcion debe usar, y luego en los siguientes argumentos iran los valores que seran usados para trabajar...

El problema reside en cuando se quiere hacer mas de una de esas funciones, para lo cual especificaria mas de un parametro, o tambien para cuando los datos no van de manera organizada.

Aqui es donde entra a jugar el comando SHIFT, y algo de logica para poder trabajar con todo esto sin causar errores en nuestros codigos, para esto lo mejor es basarse en valores Booleanos de "Verdadero" y "Falso" (True - False) para saber que se debe hace o que parametros se han especificado, y ya luego hacer comprobaciones con IF y sus respectivos resultados.

Ej:
Código:
 @echo off
 @title Comprobacion de Argumentos
cls

If "%~1"=="" (Echo. No Se Especificaron Argumentos...&Goto :Eof)
For %%a in (A,B,C,D,E) do (Set Par_%%a=False)
Set /a Args=0&Set Arg[0]=%0
Setlocal Enabledelayedexpansion

:Init
If "%~1"=="/a" (Set /a Args+=1&Set Arg[%Args%]="/a"&Set Par_A=True&Shift&Goto :Init)
If "%~1"=="/b" (Set /a Args+=1&Set Arg[%Args%]="/b"&Set Par_B=True&Shift&Goto :Init)
If "%~1"=="/c" (Set /a Args+=1&Set Arg[%Args%]="/c"&Set Par_C=True&Shift&Goto :Init)
If "%~1"=="/d" (Set /a Args+=1&Set Arg[%Args%]="/d"&Set Par_D=True&Shift&Goto :Init)
If "%~1"=="/e" (Set /a Args+=1&Set Arg[%Args%]="/e"&Set Par_E=True&Shift&Goto :Init)
If "%Par_A%"=="True" (Echo. Se ha especificado el Parametro A)
If "%Par_B%"=="True" (Echo. Se ha especificado el Parametro B)
If "%Par_C%"=="True" (Echo. Se ha especificado el Parametro C)
If "%Par_D%"=="True" (Echo. Se ha especificado el Parametro D)
Echo.
Echo. Se Han Especificado %Args% Parametros Validos
Echo.
For /l %%b in (1,1,%Args%) do (Echo. Arg[%%b] = !Arg[%%b]!)
Echo.
Pause
Goto :Eof

::Segun sea Especificado un parametro o no, se realizara una accion.
  
En este codigo habrian cinco parametros (llamese modificadores) validos, y ya los demas argumentos serian tomados como datos para realizar alguna operacion, asi pues al especificar un parametro valido, su valor pasara a ser True, entonces se "corre" el parametro para eliminarlo pues ya se ha establecido su validez y el siguiente argumento toma la posicion del anterior para poder usarlo en el resto del codigo..... %1.

Pero como esto hay que verlo para ver como funciona, pues entonces un ejemplo mas practico:

Código:
 @echo off
cls

If "%~1"=="" (Echo. No Se Especificaron Argumentos...&Goto :Eof)
For %%a in (A,B,C,D) do (Set Par_%%a=False)
Set /a Args=0&Set Arg[0]=%0
Setlocal Enabledelayedexpansion

:Init
If "%~1"=="/s" (Set /a Args+=1&Set Arg[%Args%]="/a"&Set Par_A=True&Shift&Goto :Init)
If "%~1"=="/r" (Set /a Args+=1&Set Arg[%Args%]="/b"&Set Par_B=True&Shift&Goto :Init)
If "%~1"=="/m" (Set /a Args+=1&Set Arg[%Args%]="/c"&Set Par_C=True&Shift&Goto :Init)
If "%~1"=="/d" (Set /a Args+=1&Set Arg[%Args%]="/d"&Set Par_D=True&Shift&Goto :Init)
Set Num_1=%1&Shift
Set Num_2=%1&Shift
If "%Par_A%"=="True" (
Set /a Suma=%Num_1%+%Num_2%
Echo. La Suma Es : !Suma!
) Else (Echo. No Se Especifico Sumar los Numeros)
If "%Par_B%"=="True" (
Set /a Resta=%Num_1%-%Num_2%
Echo. La Resta Es : !Resta!
) Else (Echo. No Se Especifico Restar los Numeros)
If "%Par_C%"=="True" (
Set /a Multi=%Num_1%*%Num_2%
Echo. La Multiplicacion Es : !Multi!
) Else (Echo. No Se Especifico Multiplicar los Numeros)
If "%Par_D%"=="True" (
Set /a Divi=%Num_1%/%Num_2%
Echo. La Division Es : !Divi!
) Else (Echo. No Se Especifico Dividir los Numeros)
Goto :Eof
  
Este codigo el cual es llamado por consola, acepta como maximo 4 parametros o modificadores validos (/s /r /m /d), y lo demas lo tratara como un argumento normal que sera pasado a cada una de las funciones de suma, resta, multiplicacion y division.

En este caso se pueden poner los modificadores en cualquier orden, pero no un dato numerico antes de algun modificador porque ya no lo tomara como tal y el codigo se cerrara, luego esto solo es la parte basica, ya para algo en que se acepten tanto los parametros como los demas argumentos en cualquier orden tendria que usarse FIND o FINDSTR en todos los argumentos (%*) y establecer los valores booleanos de acuerdo a los resultados de %errorlevel%.

Espero que haya sido de utilidad. Saludos.
__________________

[Solo usuarios registrados pueden ver los links. REGISTRARSE]

|

[Solo usuarios registrados pueden ver los links. REGISTRARSE]

SmartGenius está desconectado   Responder Citando
Antiguo 25-jun-2009, 05:40   #2
Gran Colaborador
 
Fecha de Ingreso: noviembre-2008
Amigos 0
Mensajes: 1.526
Gracias: 0
Agradecido 10 veces en 7 mensajes.
Predeterminado Re: [G]Parametros y Argumentos

Muy bueno Smart!

Saludos..

Pd: aun seguimos esperando el tuto de los juegos.. :
__________________



xassiz está desconectado   Responder Citando
Respuesta

Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado
Trackbacks están Activado
Pingbacks están Activado
Refbacks están Activado



Temas Similares
Tema Autor Foro Respuestas Último mensaje
Argumentos siguiente operación. P4|3L0 Carbide C/C#/C++ 9 13-feb-2009 17:43
Argumentos P4|3L0 Carbide C/C#/C++ 9 06-feb-2009 08:48
Argumentos curiosidad. P4|3L0 Carbide C/C#/C++ 9 03-feb-2009 15:32
Ingresar parametros rollape Visual Basic y Net 1 26-oct-2008 09:53
[W] Detectando parametros (argumentos) lShadowl ASM 0 27-mar-2008 19:30



Portal Hacker
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0