Batch_avanzado.pdf
Short Description
Download Batch_avanzado.pdf...
Description
MANUAL BATCH NIVEL MEDIO-AVANZADO BY 2FAC3R. CONTENIDO. Introduccion……………………………………………………2 CD- Aclaracion…………………………………………………2 Comandos no explicados anteriormente…………………3 -Dir…………………………………………………………..3 -If exist...else……………………………………………7 -If not exist, If %errorlevel%........................8 Mas comandos!!!.............................................................10 -Tree…………………………………………………………11 -Fc……………………………………………………………12 -Ren………………………………………………………….14 -Type…………………………………………………………15 -At…………………………………………………………….16 -Call…………………………………………………………..17 Comando For!................................................................18 Despedida…………………………25
INTRODUCCION
Hola lector, este manual va para aquellos que ya se han visto algunos manuales de batch, ya que este manual será de nivel medio-avanzado, aquí me basare en lo que he explicado en los manuales anteriores de Batch, en este caso será un complemento de los manuales que he hecho, ya que como muchos ya me conocerán, los dejaba a su búsqueda algunas cosas, en este manual encontraran todo (o la mayoría) de lo que no explique en su momento, aparte de esto explicare cosas que complementan mas a su estudio del batch, cuando termines este manual te puedes considerar como un buen programador en Batch ya que se explicara casi todo sobre Batch, y pues como muchos ya sabrán uno crece practicando y con buenas ideas de que programar, también mencionar que lo que se vera aquí es posible que a la primera no lo comprendas del todo, así que no te rindas y sigue practicando, sin mas rollo voy al manual.
CD –ACLARACIÓN
Dado que en el manual de batch Basico que hize, mencione que el comando “cd” no servia para casi nada, quiero aclarar ese punto en este manual, lo que quize decir es que el “cd” es fácil sustituirlo por otro comando y es mucho mas fácil y rápido hacer con otros comandos lo que hace el “cd”, también aclarar que el cd es muy utilizado en la Shell y no mucho en el bata si que pueden ir probando el comando “cd” que ya explique cuando vimos el troyano en ftp, el comando en el ftp funciona exactamente igual que en el cmd asi que a probar!!!.
COMANDOS NO EXPLICADOS ANTERIORMENTE
DIR: Este comando lo pase por alto en los otros manuales asi que vamos a explicarlo bien :D, el comando “dir” nos sirve para mostrar la lista de subdirectorios y archivos que hay en un directorio, un ejemplo seria el que aplicamos en el ftp para mostrar los archivos que había adentro, ahora vamos a otro ejemplo, vamos a la cmd, y vamos a la carpeta %windir% con cd y vamos a ver que carpetas y archivos tiene dentro :D.
Con esto nos vamos directamente a la carpeta “Windows” del S.O. ahora vamos a hacer un “dir”.
Y nos va a salir esto:
Es ahí donde nos va a mostrar los archivos y carpetas que tenemos en nuestro directorio de Windows. -Pero no me gusta como lo ordenaBien si no te gusta esto pues vamos a checar los parámetros del “dir”, vamos a teclear “dir /?”. Y nos ha salido esto:
Y vemos que con el parámetro “/d” hace que nuestro dir aparesca clasificado por columnas ahora vamos a probarlo, tecleamos cls para borrar la pantalla y después tecleamos “dir /d” y nos saldrá esto:
Este es un pequeño ejemplo de un parámetro del dir, ahora si te toca a ti probar los demás, recuerda que para borrar la pantalla tecleamos “cls” y asi se nos limpia, recuerda usar “/?” para pedir ayuda a la Shell.
IF EXIST (GOTO :ETIQUETA1) ELSE GOTO:ETIQUETA2 Dado a que en los manuales anteriores no explique esto bien lo hare ahora, vamos a hacer un ejemplo, vamos a ver el code: [code] @echo off Title Ejemplo del if exist If exist texto.txt (goto :seguir) else goto :crear :crear Echo este es el ejemplo del if>texto.txt :seguir Echo Ya esta creado! Pause Start texto.txt Exit [/code] Este es un simple ejemplo del “if exist”, lo que hace es primero verificar si existe el archivo “texto.txt” y si existe muestra en pantalla “Ya esta creado” sino lo crea con lo que ya hemos visto que son los redireccionamientos “>|>>” en este al crearlo solo escribe “este es el ejemplo del if” con ayuda del “echo” recuerdas? Lo que hemos estado viendo?. -Si, si ya sigueOk ok, eso es bueno, que recuerdes lo que hemos estado viendo , bien vamos a continuar, por ultimo el bat lo que hace es ejecutar el “texto.txt” que ya a creado en caso de que no exista, y si ya existía pues solo lo ejecuta
xD, ahora te toca a ti probar con tu ingenio y conocimiento, dado que es fácil no creo que se te complique mucho, recuerda que si tienes dudas primero usa el “/?” y si continúan las dudas preguntame por los foros (recuerda que soy 2Fac3R|RocKeG|Gaara_18). Ya que andamos en “if” explicare los demás, vamos ahora a…
“if not exist “if %errorlevel%” Vamos que es fácil, el “if not exist” es lo contrario a “if exist”, vamos a un ejemplo con las tres, de una vez :D. [code] @echo off title Bucador de procesos color 1f :inicio cls Set /p pass= Escribe el password para entrar__ If %pass%==1234 (goto :menu) else goto :error :error echo Contraseña incorrecta, vuelve a intentarlo pause goto :inicio cls :menu
echo Este es un programa para saber si esta corriendo un proceso echo Hecho por 2Fac3R. pause cls set /p pro= Escribe el nombre del proceso a buscar:__ tasklist /M | find /i "%pro%.exe" if %errorlevel% EQU 0 (echo.Proceso Abierto) else (echo.Proceso Cerrado) pause cls echo Programa creado por 2Fac3R. pause exit [/code] Este code es un poco mas complejo, es aquí donde empieza lo “difícil” de Batch, vamos a analizar el code línea por línea para que se entienda, primero vemos “title…” esto ya lo explicamos y es el comando que se encarga de poner un titulo a nuestro bat, después viene el comando “colo…” este comando se encarga de “colorearnos” nuestro programa, en este caso elegimos “1f” que es con fondo azul y letras blancas. El siguiente comando es el set /p, que nos pide una contraseña y en caso de ser “1234” accede al menú, sino es muestra un mensaje de ‘error’ y al presionar una tecla vuelve a pedir la contraseña, todo esto con el comando “if”, después en el menú nos muestra información del programa que nosotros imprimimos con “echo”, después de presionar una tecla nos limpia la pantalla y va al programa que nos interesa, nos pide el nombre del proceso que queremos buscar, lo guarda en la variable “pro” y al dar enter busca el proceso. Ahora es donde deben
poner atención xD, en el code que sigue nos muestra el comando “tasklist” que si recordamos es el que se encarga de listar los procesos, vemos que tiene el parámetro “/m” que es el que nos muestra todas las tareas que tienen cargadas modulos de bibliotecas dll que coinciden con el nombre estándar mencionado. Y en caso de que no especificaramos el nombre nos muestra todos los modulos cargados para cada tarea. Despues en el code vemos el “|” que es el que se encarga de separar las cosas (uff a ver si me entienden xD) sigue leyendo y entederas xD, después el comando “find” se encarga de buscar en la lista de procesos que cargamos ya con “tasklist” en este caso usamos el parámetro “/i” que si en caso de que el usuario ingrese con mayúsculas y minúsculas el nombre lo cambia a predeterminado, en otras palabras las omite :D, vemos que hemos usado en el nombre la variable que preguntamos antes de ello que es “%pro%”, bien después de eso vamos a algo nuevo el “if %errorlevel%”, esto sin haber estudiado otro lenguaje es posible que no se entienda mucho, lo que hace en este caso el errorlevel es que en caso de ser “cierto” (true) devuelve algo y si es “falso” (false) devuelve otra cosa, en este caso si el proceso existe o sea que el errorlevel sea true nos devuelve “Proceso Abierto” y si no se encuentra entonces equivale a “false” y en este caso devuelve “Proceso Cerrado” (espero haberme explicado bien :D), otra cosa en batch el “true” quivale a “0” y el “false” equivale a “1” por eso es que si el resultado es “0” (true) devuelve tal y si el resultado no es “0” (o sea que sea “1”) devuelve tal cosa. Estudia lo que acabo de escribir y seguro que lo entenderas sin ningún problema.
MAS COMANDOS!!!
Seguimos con los comandos que no se han explicado y que nos pueden servir de mucho para nuestros programas bat. El siguiente comando es…
TREE Este comando es parecido al “dir” solo que este comando nos muestra de forma grafica la estructura de carpetas, vamos a hacer un ejemplo, vamos a ver de forma grafica la carpeta “Windows” para ello usaremos el comando “cd” para ubicarnos (cd %windir%) entonces vamos a la practica:
Recuerda que existen los parámetros, pero en este caso no usare ninguno :D, asi que sigamos:
Esta esta muy extensa asi que solo pongo una como ejemplo, creo que se entendió bien el comando sigamos.
FC Este comando es muy sencillo, solo explicare el único y con un parámetro ya que nosotros no lo utilizaremos mucho, este comando se encarga de comparar 2 archivos o conjuntos de archivos y muestra sus diferencias, vamos directo a la practica en este caso tengo 2 achivos txt en mi “C:/” para el ejemplo:
Veamos los parámetros:
Vamos a utilizar el parámetro “/u” para compararlos con texto UNICODE.
Si nos fijamos en este caso nos muestra en “limpio” solo las diferencias de nuestros txt´s. Lo demás depende de ti hombre que no se hace todo fácil en la vida xD.
REN Este comando es fácil de entender, y es muy simple, lo que nos hace es renombrar un archivo, vamos con un ejemplo sencillo, renombraremos el “prueba.txt” por “HxC.txt” vamos a la practica:
Y si vamos a la ruta C:/ vemos que el archivo ha sido renombrado, este comando no tiene parámetros ya que es super fácil de usar.
TYPE Este es otro comando sencillísimo, vamos directo a la practica:
Lo que hace este comando es mostrar el contenido de uno o mas archivos, al dar enter da esto:
Que es el contenido de nuestros archivos. ¿Verdad que es fácil?, lo mismo que el anterior si vamos a “type/?” no nos muestra parámetros :D.
AT
Sin palabras xD, mas fácil no se puede (hago esto para no alargar mucho el manual y no te aburras ni te revuelvas, además que recuerda que la practica hace al maestro =D).
CALL
COMANDO ESPERADISIMO “FOR”!!!: Como el comando “for” es muy extenso me decidi a hacerme un manual solo para ello (basándome en un manual que hace muchísimo tiempo vi por la red), asi que aquí esta: SINTAXIS Código: FOR %variable IN (cjto) DO comando donde: %variable: es la variable que va a tomar el valor correspondiente en cada iteracion del for siendo de una unica letra, distinguiendo entre MAY y min (o numero)
cjto: un cjto de ficheros comando: lo que queremos hacer en cada vuelta del for Observaciones: Dentro de un bat, se debe usar %%variable (no %variable), esto se debe a que como he dicho antes, %variable puede tomar un numero, por lo que se podria confudir con los parametros del bat, si solo se pusiese un % PARAMETROS: FOR /D %variable IN (conjunto) comando DO [parámetros] se usa cuando las extensiones de comandos estan habilitadas FOR /R [[unidad:]ruta] %variable IN (set) DO comando [parámetros] Cuando usamos comodines, para ejecutar el for recursivamente dentro de un directorio especificado (unidad:ruta) en los archivos especificados por los comodines FOR /L %variable IN (ini,paso,fin) DO comando [parámetros] Este es el típico FOR de toda la vida. supongo ini=0 paso=1 y fin=4, se crearia la sucesion 0,1,2,3,4,5 FOR /F ["opciones"] %variable IN (cjto archivos) DO comando [parámetros] Este es el que tiene chichita. FOR /F ["opciones"] %variable IN (cjto archivos) DO comando [parámetros] En este, se procesa un conjunto de archivos, de tal forma que se abre el primer archivo, se procesa, se cierra y se pasa al siguiente archivo del cjto. Cada archivo se procesa por lineas, es decir, que el for sera aplicado a cada una de las lineas del archivo. El for inicia en la primera linea, y cuando acabe su proceso digamos que se "resetea" y pasa a la siguiente línea. Las lineas en blanco se saltan
Ahora, el procesamiento de cada linea se puede modificar a nuestro antojo mediante las ["opciones"], siendo estas: EOL=c Indica que se procesen todas las linbeas del archivo menos las que empiecen por este caracter SKIP=n Indica el nº de linea del archivo por el que empezamos a procesarlo. es decir, si pongo skip=5, las 5 primeras lineas del archivo no se procesaran DELIMS=xxx Dice donde (en que simbolos) se quedara el for en cada vuelta (dentro de una misma linea) TOKENS=x,y,m-n Dice cuales son las vueltas validas del for, es decir, en que vueltas del for nuestra variable tomara un valor. se pueden poner posiciones sueltas: 2,3,4 o rangos: 1-4 o incluso los dos juntos: 1,3-5. ademas, si ponemos el *, se añade otra variable adicional que contendra el resto de la cadena que no haya llegado a ser procesada por el FOR USEBACKQ Esto es para el uso de comillas, no es algo muy importante, pero puede ser util dependiendo de como se llamen los archivos que vayamos a tratar y demas. esto mirarlo si interesa en la ayuda Lo que viene despues en la ayuda es sobre el uso de expansión de variables, que puede ser util, pero mejor mirarlo en la ayuda ademas, esto se puede entender mejor en la ayuda del SET Bueno. hasta aqui es la ayuda del for de msdos explicada por mi, que posiblemente no os haya servido pa na. Vamos con unos ejemplos a ver si solucionan la cosa. Primero explicare como funciona el FOR /F ["opciones"] ......... Pues vamos a ver, esto lo que hace es buscar en todas las filas de un
archivo. Entonces, almacena en variables el trozo de cadena que existe entre un delimitador y otro, y asi hasta el nº de tokens. un ejemplo cutre seria, en la linea hola buenos dias si el delim=" " (espacio en blanco) y tokens=1,2,3. esto significa que queremos coger 3 (1,2,3) trozos de cadena que esten uno tras otro de forma contigua y delimitados por el espacio. asi obtendriamos 3 variables que almacenarian i=hola j=buenos k=dias Pongamos ahora un ejemplo real por si no se ha entendido. Creamos el archivo de texto 1.txt con el siguiente contenido ----------- 1.txt ;hola buenos dias este es un manual, dedicado al for ;para.la.gente.que.quiera.aprender ;y para los demas tambien hasta luego 1 =Hola 2=adios 3=buenas ----------------vamos a realizar un primer FOR. abrimos la consola y ponemos Código: for /f "eol=; tokens=1 delims=," %i in (1.txt) do echo %i Este for procesara todas las lineas menos las que empiecen por ; ya que eol=; En cada linea que procese solo dara tantas vueltas como "," se encuentre (delims=,). y almacenara en la variable %i, solamente la parte de la cadena que se encuentre entre el principio y
la primera (tokens=1) aparicion de "," Para las lineas que no tengan "," se considera el primer token como la linea completa, porlo que en esas lineas en vez de pasar de ella, las tomara enteras en la variable. Asi, el resultado de este for seria: este es el manual ---> falta lo que viene a partir de la "," porque no lo ha cogido debido al delims hasta luego | 1 =Hola |-->En estas, como no hay "," coge toda la linea 2=adios | 3=buenas | Otro ejemplo mas claro seria: Código: for /f "eol=; tokens=1,2,3 delims= " %i in (1.txt) do echo %i %j %k lo mismo daria poner la parte tokens asi: Código: for /f "eol=; tokens=1-3 delims= " %i in (1.txt) do echo %i %j %k Ahora queremos coger de cada linea, menos de las que empiecen por ; (eol=;) las cadenas que se encuentren entre token1 --> el principio y el primer " " (delims=" ") token2 --> el primer " " y el segundo " " token3 --> el segundo " " y el tercer " " y el resto lo desechariamos. Darse cuenta de que en este caso necesitamos coger 3 cosas por cada linea, por lo que no nos vale solo con la variable %i, si no que necesitaremos tambien las %j y %k. Para esto, j y k no se declaran en el for (como la %i, de hecho unicamente se dclara la primera que se vaya a usar, puede ser %i, %a, %1 o lo que sea), si no que se ponen en el la parte del comando a la hora de trabajar con ellas. Tener en cuenta tambien que si declaramos la variable %i en el for todas las que usemos deben ir consecutivas en
orden alfabetico y nunca superar los 26 simbolos. seria %i %j %k %l %m.... si seleccionamos %a en el for, seria %a %b %c %d. y siempre diferenciando entre MAY y min. Entonces en este ejemplo nos saldria lo siguiente: este es un hasta luego 1 =Hola 2=adios 3=buenas si queremos, para verlo mas claro, podemos meter algun caracter raro entre %i, %j y %k Código: for /f "eol=; tokens=1-3 delims= " %i in (1.txt) do echo %i ? %j ? %k Obteniendo el siguiente resultado este ? es ? un hasta ? luego ? 1 ? =Hola ? 2=adios ? ? 3=buenas ? ? Vemos como en las lineas 3 y 4 aparecen las ? al final y sin nada entre medias, esto se debe a que la variable %i contiene 2=adios (todo hasta el final) y las variables %j y %k estan vacias Un ultimo ejemplo para ver el uso del * seria. para ello le quitamos el ; al principio de todas las lineas que lo tuvieran: Código: for /f "tokens=1,2* delims= " %i in (1.txt) do echo %i ? %j ? %k
Ahora pone en las variables %i y %j: token1 (variable %i)--> entre el principio y el primer " " (delims=" ") token2 (variable %j)--> entre el primer " " y el segundo " " y en la variable %k, que viene definida por el token *, se pondra el resto de la cadena asi el resultado seria: hola ? buenos ? dias este ? es ? un manual, dedicado al for para.la.gente.que.quiera.aprender ? ? y ? para ? los demas tambien hasta ? luego ? 1= ? hola ? 2=adios ? ? 3=buenas ? ? -------------------------por ultimo os pongo un ejemplo muy util cuando por ejemplo queremos buscar en un archivo de registro, un valor determinado. imaginaros que quiero buscar en el archivo 1.reg, el valor de la clave SwapMouseButtons. sabiendo que en el archivo 1.reg, existe una linea que pone SwapMouseButtons=1. pero ademas hay muchas otras lineas similares como: mouse=9, but=6 .... asi que si usamos el for normal sobre el archivo directamente no hay forma de sacar solo el valor que queremos por lo que podemos hacer un find sobre el archivo que nos devuelva unicamente la linea que contiene la palabra SwapMouseButtons, y hacer el for sobre ella. con esto quiero decir, que ademas de sobre archivos, podemos aplicar el for sobre comandos que actuen sobre archivos y nos den lo que queremos de ellos de una forma mas especifica. este ejemplo seria asi:
Código: FOR /F "tokens=1* delims==" %A IN ('FIND /I "SwapMouseButtons" c:\1.reg') do echo %B el resultado seria que muestra por pantalla: 1 si hubiesemos puesto ..... do echo %A mostraria por pantalla SwapMouseButtons
DESPEDIDA Bueno aquí es donde termina este manual, he explicado muchísimas cosas que había pasado por alto, este manual se puede tomar como un complemento de los anteriores y también como un manual de nivel medio-avanzado, si te haz leído todo el manual y lo haz entendido esto quiere decir que ya eres programador batch asi que a celebrar!!!, les recuerdo que dudas, comentarios, criticas y/o sugerencias comuníquenmelas en el foro, me paso muy seguido por ahí asi que seguro que me encuentran, soy Gaara_18|RocKeG|2Fac3R asi que me pueden encontrar con esos Nick, los espero comentando por los foros y codeando para que practiquen todo lo aprendido, algo que no he explicado en esto son los compliladores, que son los que se encargan de convertir nuestro pequeño bat a exe, en el foro he posteado los compiladores asi que pasate por haya para que los descargues y pruebes a pasarlo a lenguaje binario, recuerda que aun hay mas (mucho mas) de batch asi que no te quedes con esto y busca y pregunta dudas que para eso estamos en los foros, me despido de ustedes deseándoles lo mejor en este año, espero nos veamos seguido por los foros :D. -.2Fac3R.-
View more...
Comments