TALLER archivos BAT

Si has creado algún documento interesante, este es su sitio

Moderador: Moderadores

TALLER archivos BAT

Notapor Cyathogoku » Mié Oct 18, 2006 5:23 pm

Bueno da comienzo este pequeño manual sobre programacion de archivos de lotes o BAT.

Antes de todo quiero dejar claro que este manual no va dirigido de ninguna forma a dar scripts para pinchar y hackear si no que os
daré todo lo que sé hasta el momento para que vuestras mentes curiosas puedan hacer con estas nociones lo que querais.

Bueno sin mas dilacion comenzamos:


QUE NECESITAMOS SABER ANTES DE ESCRIBIR UN ARCHIVO BAT
-------------------------------------------------------

1. Toda sentencia SIEMPRE comienza por un comando MS-DOS o programa que podamos ejecutar desde MS-DOS.
2. Solo podemos usar comandos del DOS , o programas que se ejecuten bajo DOS, en los archivos BAT.
3. Un archivo BAT se ejecuta de forma lineal, EN GENERAL.
4. Todos los comandos MS-DOS y los argumentos/opciones van separados por espacios, aunque se pueden poner sin espacios pero escritos con espacios son mas legibles e inducen a menos errores.

QUE COMANDOS DE MS-DOS PODEMOS USAR
------------------------------------

Esta parte es muy importante pues en el XP, por ejemplo, la version del MS-DOS es una emulación y no tiene todos los comandos del MS-DOS original, para saber cuales podemos usar y los que no segun la version de Windows,para ello usaremos un archivo BAT, claro esta.

Código: Seleccionar todo
   REM Archivo BAT que nos da los comandos de MS-DOS que podemos utilizar
   ECHO Recopilando comandos BAT...
   HELP >c:comandos.txt
   ECHO Recopilacion finalizada
   ECHO Se ha creado un archivo "comandos.txt" en el Disco C:\
   PAUSE
   



Pues estas lineas escritas en un documento de texto,notepad por ejemplo, que no WORD, al ejecutarlo nos daria un archivo de texto en la particion C: con el nombre comandos.txt en el cual tendriamos todos los comandos soportados para nuestro Sistema Operativo, en este caso un XP profesional Sp2.

EXPLICACION
-----------

El archivo BAT cumple los tres puntos que he puesto mas arriba y para que lo veais os voy a decir paso a paso que hace este archivo BAT.

Primero ejecuto el comando REM cuya funcion es no ejecutar todo lo que tenga detrás, es decir hacer un comentario.
Se sigue ejecutando el BAT y pasa a la siguiente linea donde se ejecuta el comando ECHO cuya funcion es imprimir en pantalla todo lo que tenga detras.
Seguimos y bajamos de linea y se encuentra con el comando HELP cuya funcion es imprimir en pantalla la ayuda del MS-DOS o la sintaxis especifica de un comando, en este caso como no le hemos puesto ningun parametro nos muestra todos los comandos de MS-DOS disponibles, despues tenemos un mayor que una ruta, esto lo que hace es lo que haga cualquier comando lo ponga en un documento en la ruta que le demos, de texto en este caso.
Seguimos y se ejecutan otros dos comandos ECHO hasta que llegamos al comando PAUSE cuya funcion es pausar la ejecucion hasta que el usuario pulse una tecla.

Como habeis visto toda sentencia y comienzo de linea comienza SIEMPRE por un comando de MS-DOS, se ejecuta de forma lineal va linea a linea, por el momento, hasta como os diga como podemos cambiar esto, y que todos los comandos van seraparados por espacios.




Ya hemos visto un BAT propiamente dicho, ahora vamos a ir complicandolo poco a poco, para ello voy a ir dandoos y explicandoos otros comandos y algunas de sus funciones mas usuales.


PRIMEROS COMANDOS
-----------------

REM
ECHO
PAUSE
SET
IF
FOR


Para empezar vamos a ver estos cinco comandos y su funcinamiento

REM como hemos visto este comando lo que hace es hacer un comentario en el codigo
ECHO este comando lo que hace es imprimir en pantalla lo que le digamos.
PAUSE Lo que hace es para la ejecucion del archivo hasta que no se pulse una tecla.

SET Este comando lo que hace es crear variables y lo hace de la siguiente forma:

Código: Seleccionar todo
SET variable=valor


Ademas tiene dos opciones las cuales nos vendrán bien para los ejercicios, que son /p y /a

Si ejecutamos el comando SET con la opcion /p lo que hace es parar la linea de comandos y esperar a que el usuario le de un valor a esta variable

por ejemplo:
Código: Seleccionar todo
REM Ejemplo comando SET /p
ECHO Introduzca un numero del 0 al 9:
SET /p valornumero=
REM Las variables se llaman poniendo el signo porcentaje delante y detrás, pero no para crearlas.
ECHO Usted a escrito %valornumero%
PAUSE


Sin embargo la opcion /a sirve para sumar el valor de diferentes variables

por ejemplo:
Código: Seleccionar todo
REM Ejemplo comando SET /a
ECHO Introduzca un numero
SET /p numero1=
ECHO Introduzca otro numero
SET /p numero2=
SET /a suma=%numero1%+%numero2%
ECHO La suma de los dos numeros es %suma%
PAUSE



IF Este comando es uno de los pocos bucles que podremos usar en la programacion de Scripts BATCH o archivos BAT.

Este comando se utiliza de la siguiente forma:

Código: Seleccionar todo
IF opcion evaluacion(dato condicion dato) comando a ejecutar ELSE comando a ejecutar


Esa es la sintaxis básica del comando IF, donde IF es el propio comando, opciones son las diferentes opciones que podemos añadir, despues vemos que tenemos una evaluacion la cual consta de u primer dato, el cual tenemos que compararar con otro dato, para eso le ponemos una condicion:

Las condiciones que podemos usar son las siguientes:

EQU ó == (igual)
NEQ (no igual)
LSS (menor que)
LEQ (menor o igual que)
GTR (mayor que)
GEQ (mayor o igual que)

Y despues vemos que tenemos "comando a ejecutar" el cual se ejecuta SI (IF) la evaluacion es verdadera SI NO ejecuta el comando detras del else

Código: Seleccionar todo
REM Ejemplo comando IF
ECHO Introduzca un numero
SET /p numero1=
ECHO Introduzca otro numero
SET /p numero2=
REM Solo se puede poner sin espacios la condicion igual si la ponemos con signos si la ponemos con letra seria IF numero1 EQU numero2 "comando a ejecutar"
IF numero1==numero2 ECHO Los numeros son iguales ELSE ECHO Los numeros no son iguales
PAUSE


Yo solo he puesto unos comandos ECHO pero hay podemos poner lo que sea.

El comando IF tiene mas opciones pero la sintaxis es la misma siempre asi que solo es poner y cambiar por lo que ya iremos viendo ejemplos para que los vayamos viendo.


FOR este comando es otro bucle el cual basicamente se usa para hacer contadores.

La sintaxis de este comando es:

Código: Seleccionar todo
FOR opciones opciones de opciones variable IN (conjunto) DO comando a ejecutar


Esta es la sintaxis general

FOR es el comando de bucle, despues tenemos opciones y despues opciones de opciones, es decir que son opciones de la opcion que pusimos antes si no ponemos opcion anterior opciones de opciones no se vale para nada, despues tenemos variable (%%variable) que es la que vamos a usar para que funcione el bucle despues vemos un IN el cual no se puede cambiar y despues vemos conjunto el cual nos define el bucle propiamente dicho despues tenemos DO y despues comando a ejecutar.

la forma de que conjunto nos define el bucle es el siguiente:

Código: Seleccionar todo
(desde variable,de variable en variable,hasta variable)

FOR /L %%c IN (1,1,10) DO ECHO %%c


Este codigo lo que hace es ejecutar el comando FOR despues vemos una opcion /L que le indica al comando FOR que vamos a usar un bucle despues la variable despues el IN y luego el conjunto el cual le dice al comando FOR que desde uno pasando de uno en uno hasta diez, este seria el bucle mientras el bucle se pueda ejecutar nos haga (DO) un comando en este caso un ECHO el cual nos imprime el valor que tiene la variable %%c.

el funcionamiento es empiezo en 1 como no es diez paso al do y imprimo el valor de %%c que es uno ( la variable %%variable toma el valor de la primera variable del conjunto) como el bucle no termino sigo antes tenia 1 si sigo asi el bucle no terminará tonces la primera variable mira a la siguiente variable del conjunto y esta le dice oye que tienes que pasar de uno en uno, tonces la primera variable dice anda coño si ahora soy dos y mira soy 10, no tonces hago lo que hay detrás del DO que es imprimir el valor de la primera variable en este caso ya no es uno sino dos, asi seguiria hasta que la primera variable sea 11 donde ya sobrepasa al 10, pues FOR es un bucle autoincremental asi que cuando ya es once dice ostias que me he pasado enga que trabaje la otra linea y se ejecuta la linea que haya debajo, porque si recordamos el punto 3 un archivo bat se ejecuta linea a linea, si no queremos esto para eso tenemos los bucles como estos en combinacion del comando GOTO.


GOTO la funcion de este comando es enviar a una parte del codigo la ejecucion en curso (por lo tanto ya no es lineal) XD

Ahora dejemos tanta charla y os voy a poner un ejecicio para que veais un poco de utilidad esto de los archivos BAT.


Este ejercicio esta orientado a crear/borrar/asignar grupos/usuarios en un dominio, es que toy estudiando Admin de redes XD

Este ejercicio tiene fallos y se puede optimizar mas, asi que os dejo esto como ejercicio hasta que despues de que os estrujeis el cerebelo yo os ponga la version sin fallos, vale?

Código: Seleccionar todo
@ECHO OFF
REM Ejercicio 1 del taller de BAT en Wadalbertia y para rendir honores a mi querida HXC by Cyathogoku
ECHO Escriba el total de usuarios a crear:

REM Inicia las variables para utilizar en el proceso

SET /p ttal=
CLS
SET /a b=1
SET /a c=%ttal%+1

REM Inicia el bucle del proceso de creacion de usuarios

:inicio

for /L %%j in (1,1,%ttal%) do goto paso1

:paso1

ECHO Digame el nombre de usuario %b%:
SET /p user=
CLS

ECHO Digame la contraseña del usuario %b%:
SET /p pass=
CLS

:cambio

ECHO Puede cambiar contraseña?[s/n]:
SET /p cambiar=
IF /i %cambiar%==s GOTO sigue
IF /i %cambiar%==S GOTO sigue
IF /i %cambiar%==n GOTO sigue
IF /i %cambiar%==N GOTO sigue

GOTO cambio

:sigue

IF /i %cambiar%==s SET cambiar=YES
IF /i %cambiar%==n SET cambiar=NO


ECHO Digame donde puedo conectarme separado por comas y sin espacios:
SET /p ordenadores=
CLS

ECHO Digame los dias y el horario de conexion [{día[-día][,día[-día]] ,hora[-hora][,hora[-hora]] [;…] | all}]:
SET /p horas=
CLS

NET USER %user% %pass% /passwordchg:%cambiar% /times:%horas% /workstations:%ordenadores% /add /domain
SET /a b=%b%+1
IF %b%==%c% GOTO fin

GOTO inicio

:fin
Cyathogoku
:-D
:-D
 
Mensajes: 142
Registrado: Lun May 15, 2006 3:31 am

Volver a Faq

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado