Comunidad Underground Hispana  

Retroceder   Comunidad Underground Hispana > Programacion > Batch / Bash-Shell

Like Tree11Me Gusta

Tema Cerrado Crear Nuevo Tema
 
Compartir en twitter LinkBack Herramientas Desplegado
Antiguo 25-feb-2013, 16:42   #1
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.958
Agradecido 407 veces en 287 mensajes.
Post Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • EL TUTORIAL Y EL ÍNDICE ESTÁN EN PROCESO...






    ÍNDICE

    Pincha en un tema para ir directamente.
    • Página 1


    • 1. DEFINICIONES


    Lenguaje de programación
    Procesamiento por lotes
    Script
    Comando
    CMD (o Consola) (o Shell) (o DOS) (o Símbolo de sistema)
    BATCH
    Archivo BAT
    CLI (CommandLineInterface)
    Subrutina
    Argumento (o Parámetro)
    Variable
    Variable de entorno de Windows
    PATH (Variable de entorno de Windows)
    String (o Cadena)
    Concatenación
    Expresión
    Expresión regular (o REGEXP, o Patrón)
    Operador
    Pseudocódigo

    • 2. CONSEJOS ANTES DE COMENZAR


    Defínemelo otra vez
    Pregúntaselo a la CMD (Help, /?, -h, -help)
    En busca del error
    Productividad 1 (Editores de código)
    Productividad 2 (Plantillas)
    Práctica (Retos)
    Ética

    • 3. LOS PRIMEROS PASOS


    3.1 Una identidad (Title)
3.2 La voz (Echo, Echo:, Echo+)
3.3 El silencio (@, Echo OFF, >NUL)
3.4 La escritura ("")
3.5 La lectura (REM)
3.6 Caminar (GOTO, Pause)
3.7 Memorizar (Set)

  • 4. OPERADORES


4.1 Operadores de Ejecución condicional (& && ||)
4.2 Operadores de Ejecución condicional simulada (&= ^= |=)
4.3 Operadores de Exclusión (^)
4.4 Operadores de Agrupación ( () )
4.5 Operadores de comparación (o Condicionales) (== EQU NEQ LSS LEQ GTR GEQ)
4.6 Operadores de desplazamiento lógico (o Redireccionamiento) (> >> < |)
4.7 Operadores aritmétricos y de asignación (+ - * / % = += -= *= /= %= >>= <<=)
4.8 Otros operadores (@ :: "" % ! ? * . .. \)



  • 6. VARIABLES


6.1 Variables especiales (o variables de parámetro) (o variables de argumento) (%0 %*)
6.2 Variables Standard (%%) (SET, SET /A, SET /P)
6.3 Variables expandidas (!!) (SETLOCAL ENABLEDELAYEDEXPANSION)
6.4 Variables de entorno (%%)
6.5 Variables de FOR (%%a)


compmaraciones
búcles
subrutinas
  • 5. SINTAXIS


comandos
cuban, victorquiroga, jino139 y 3 otros les gustó esto.
__________________
EleKtro está desconectado  
Los Siguientes 6 Usuarios Agradecieron a EleKtro por Este Mensaje:
Bater (05-mar-2014), converses_pink (10-mar-2013), cuban (25-feb-2013), jino139 (25-feb-2013), loxa (03-nov-2013), pax01 (15-abr-2013)
Antiguo 25-feb-2013, 16:42   #2
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.958
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

1. DEFINICIONES



  • Lenguaje de programación


Cita:
Iniciado por WIKIPEDIA
Un lenguaje de programación es un idioma artificial diseñado para expresar procesos que pueden ser llevadas a cabo por máquinas como las computadoras.
Pueden usarse para crear programas que controlen el comportamiento físico y lógico de una máquina, para expresar algoritmos con precisión, o como modo de comunicación humana.
Está formado por un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones.

También la palabra programación se define como el proceso de creación de un programa de computadora, mediante la aplicación de procedimientos lógicos.





  • Procesamiento por lotes


Cita:
Iniciado por WIKIPEDIA
Se conoce como sistema por lotes (batch processing), o modo batch, a la ejecución de un programa sin el control o supervisión directa del usuario (que se denomina procesamiento interactivo). Este tipo de programas se caracterizan porque su ejecución no precisa ningún tipo de interacción con el usuario.

Generalmente, este tipo de ejecución se utiliza en tareas repetitivas sobre grandes conjuntos de información, ya que sería tedioso y propenso a errores realizarlo manualmente. Un ejemplo sería el renderizado de los fotogramas de una película.





  • Script


Cita:
Iniciado por WIKIPEDIA
Un script es un programa que por lo regular se almacena en un archivo de texto plano.
Los scripts son casi siempre interpretados, pero no todo programa interpretado es considerado un script.
El uso habitual de los scripts es realizar diversas tareas como combinar componentes, interactuar con el sistema operativo o con el usuario. Por este uso es frecuente que los shells sean a la vez intérpretes de este tipo de programas





  • Comando


Cita:
Iniciado por WIKIPEDIA
Un comando (calco del inglés command, «orden, instrucción» o mandato) es una instrucción u orden que el usuario proporciona a un sistema informático, desde la línea de comandos (como una shell) o desde una llamada de programación. Puede ser interno (contenido en el propio intérprete) o externo (contenido en un archivo ejecutable).

Suele admitir parámetros (argumentos) de entrada, lo que permite modificar su comportamiento predeterminado.





  • CMD (o Consola) (o Shell) (o DOS) (o Símbolo de sistema)


Cita:
Iniciado por WIKIPEDIA
El símbolo del sistema (en inglés Command prompt) es el intérprete de comandos.
Es el equivalente de command.com en MS-DOS y sistemas de la familia Windows 9x.

Muchas funciones que se realizan desde la interfaz gráfica de Windows son enviadas al CMD que es el encargado de ejecutarlas.
NOTA: La CMD se encuentra en la ruta: C:\Windows\System32\CMD.exe






  • BATCH


Batch es un lenguaje secuencial (procesamiento por lotes) por comandos que proviene de la familia de comandos "MS-DOS", el cual puede interactuar perfectamente con Windows,
Batch sirve entre otras cosas para realizar scripts que automaticen taréas comunes del sistema, taréas que nos resultarían dificil hacer a mano como por ejemplo organizar una carpeta usando "reglas" cada X tiempo, automatizar un procedimiento virtual parecido a un "BOT" como sería abrir una página web y clickar cada X tiempo en un lugar, etc, etc, etc...






  • Archivo BAT


"BAT" no es más que la extensión de un archivo, para que la CMD identifique un script escrito en Batch, deberemos añadirle la extensión .BAT, o .CMD al archivo.

Cita:
Iniciado por WIKIPEDIA
un archivo batch es un archivo de procesamiento por lotes. Se trata de archivos de texto sin formato, guardados con la extensión BAT que contienen un conjunto de comandos MS-DOS. Cuando se ejecuta este archivo, —mediante CMD— los comandos contenidos son ejecutados en grupo, de forma secuencial, permitiendo automatizar diversas tareas. Cualquier comando MS-DOS puede ser utilizado en un archivo batch.

Ésta es la forma de automatizar procesos (copiar, pegar, renombrar y enviar datos) en MS-DOS. De este modo, evitamos procesos rutinarios y monótonos, acelerando los mismos. Tiene la funcionalidad de conectarse con otras interfaces por línea de comandos.

Un tipo batch es un archivo de texto que contiene comandos a ejecutar en un intérprete de comandos propio de DOS o OS/2. Cuando es iniciado, un programa shell —típicamente command.com o cmd.exe— lo lee y ejecuta, generalmente línea a línea. De este modo, se emplea para ejecutar series de comandos automáticamente. El hecho de que funcione sólo para MS-DOS lo hace muy limitado. Su extensión es .bat o .cmd.





  • CLI (CommandLineInterface)


CLI es un término que se refiere a las aplicaciones sin interfaz gráfica.

Una "Aplicación CLI" equivale a decir "Aplicación por línea de comandos", estas aplicaciones son programadas para usarse exclusivamente desde la consola.

Normalmente estas aplicaciones están programadas para que actuen al pasarle un argumento mediante la consola, y suelen especificar su funcionamiento mediante una opción de ayuda en la consola, en los que se indica qué se quiere ejecutar y que hace cada cosa.

Cita:
Iniciado por WIKIPEDIA
Interfaz de Línea de Comandos (CLI), por su acrónimo en inglés de Command Line Interface (CLI), es un método que permite a las personas dar instrucciones a algún programa informático por medio de una línea de texto simple. Debe notarse que los conceptos de CLI, Shell y Emulador de Terminal no son lo mismo, aunque suelen utilizarse como sinónimos.

Las CLI pueden emplearse interactivamente, escribiendo instrucciones en alguna especie de entrada de texto, o pueden utilizarse de una forma mucho más automatizada (archivo batch), leyendo comandos desde un archivo de scripts.





  • Subrutina


Cita:
Iniciado por WIKIPEDIA
una subrutina o subprograma (también llamada procedimiento, función o rutina), como idea general, se presenta como un subalgoritmo que forma parte del algoritmo principal, el cual permite resolver una tarea específica.

Una subrutina al ser llamada dentro de un programa hace que el código principal se detenga y se dirija a ejecutar el código de la subrutina.





  • Argumento (o Parámetro)


Un argumento es un valor que podemos enviarle a una aplicación CLI o a una Subrutina de nuestro archivo bat para que interactuen con dicho valor.

Cita:
Un argumento o parámetro es una variable que puede ser recibida por una rutina o subrutina.
Una subrutina usa los valores asignados a sus argumentos para alterar su comportamiento en tiempo de ejecución.





  • Variable


Una variable (En Batch) es un espacio virtual donde podemos guardar información en forma de texto alfabético, numérico, y alfanumérico.
Las variables son uno de los elementos más usados en cualquier lenguaje de programación/scripting, y en Batch las necesitaremos usar casi siempre.

Cita:
Iniciado por WIKIPEDIA
espacio de memoria de un ordenador, necesario para la ejecución de «programas».





  • Variable de entorno de Windows

Son variables predefinidas del sistema.

Cita:
Iniciado por WIKIPEDIA
Es posible acceder al valor de una variable de entorno, ya sea para consultarlo como para modificarlo, tanto dentro de scripts como desde la línea de comandos.
NOTA: Podemos consultar nuestras variables de entorno escribiendo en la CMD:
Código:
Set /?
  
También podemos crear una variable de entorno con el comando SETX.






  • PATH (Variable de entorno de Windows)


Posiblemente la variable de entorno más importante del sistema, en ella se almacenan las rutas de búsqueda de las aplicaciones y por eso hay que aprender su nombre y su definición.

NOTA: Se pueden añadir más rutas a la variable PATH.






  • String (o Cadena)


Cita:
Iniciado por WIKIPDIA
En programación, una cadena de caracteres, palabra, ristra de caracteres o frase (string en inglés) es una secuencia ordenada de longitud arbitraria (aunque finita) de elementos que pertenecen a un cierto lenguaje formal o alfabeto análogas a una frase o a una oración. En general, una cadena de caracteres es una sucesión de caracteres (letras, números u otros signos o símbolos).

Desde un punto de vista de la programación, si no se ponen restricciones al alfabeto, una cadena podrá estar formada por cualquier combinación finita de todo el juego de caracteres disponibles (las letras de la 'a' a la 'z' y de la 'A' a la 'Z', los números del '0' al '9', el espacio en blanco ' ', símbolos diversos '!', '@', '%', etc). En este mismo ámbito (el de la programación), se utilizan normalmente como un tipo de dato predefinido, para palabras, frases o cualquier otra sucesión de caracteres.





  • Concatenación


Cita:
Iniciado por WIKIPEDIA
Es la operación por la cual dos caracteres se unen para formar una cadena de caracteres (o string).
También se puede concatenar dos cadenas de caracteres o un carácter con una cadena para formar una cadena de mayor tamaño.
NOTA: También se pueden concatenar comandos.






  • Expresión


Cita:
Iniciado por WIKIPEDIA
En programación, una expresión es una combinación de constantes, variables o funciones, que es interpretada de acuerdo a las normas particulares de precedencia y asociación para un lenguaje de programación en particular. Como en matemáticas, la expresión es su valor evaluado, es decir, la expresión es una representación de ese valor.





  • Expresión regular (o REGEXP, o Patrón)


Cita:
Iniciado por WIKIPEDIA
Una expresión regular, a menudo llamada también patrón, es una expresión que describe un conjunto de cadenas sin enumerar sus elementos. Por ejemplo, el grupo formado por las cadenas Handel, Händel y Haendel se describe mediante el patrón "H(a|ä|ae)ndel". La mayoría de las formalizaciones proporcionan los siguientes constructores: una expresión regular es una forma de representar a los lenguajes regulares (finitos o infinitos) y se construye utilizando caracteres del alfabeto sobre el cual se define el lenguaje.





  • Operador


Un operador es un conjunto de caracteres reservados por el lenguaje (normalmente uno, o dos caracteres) que se encarga de realizar ciertas operaciones, como operaciones matemáticas, de asignación, o de desplazamiento.






  • Pseudocódigo


Cita:
Iniciado por WIKIPEDIA
el pseudocódigo (o falso lenguaje) es una descripción de un algoritmo informático de programación de alto nivel compacto e informal que utiliza las convenciones estructurales de un lenguaje de programación verdadero, pero que está diseñado para la lectura humana en lugar de la lectura en máquina, y con independencia de cualquier otro lenguaje de programación. Normalmente, el pseudocódigo omite detalles que no son esenciales para la comprensión humana del algoritmo, tales como declaraciones de variables, código específico del sistema y algunas subrutinas. El lenguaje de programación se complementa, donde sea conveniente, con descripciones detalladas en lenguaje natural, o con notación matemática compacta. Se utiliza pseudocódigo pues este es más fácil de entender para las personas que el código de lenguaje de programación convencional, ya que es una descripción eficiente y con un entorno independiente de los principios fundamentales de un algoritmo.

jino139 y pax01 os gustó esto.
__________________
EleKtro está desconectado  
Los Siguientes 2 Usuarios Agradecieron a EleKtro por Este Mensaje:
jino139 (25-feb-2013), pax01 (15-abr-2013)
Antiguo 25-feb-2013, 16:46   #3
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.958
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

2. CONSEJOS ANTES DE COMENZAR



  • Defínemelo otra vez


Si no entendiste alguna de las definiciones anteriores, es hora de que vuelvas a repasarlas porque todas ellas las vas a tener que poner en práctica muy pronto, y muy a menudo.






  • Pregúntaselo a la CMD


Puedes obtener una lista de la mayoría de comandos internos y externos disponibles en Windows además de una información breve, escribiendo HELP en la CMD.

Todos los comandos existentes en la CMD disponen de un menú de ayuda al que puedes acceder con el parámetro /? de la siguiente manera:

Código:
Comando /?
  
Los comandos externos (Aplicaciones CLI) también deberían disponer de un menú de ayuda, suelen estar programadas para multi SO y por personas con distintos gustos a la hora de scriptear, por eso los parámetros de ayuda suelen ser distintos, los parámetros más comunes son -h y -help

Código:
Comando -h
  
Código:
Comando -help
  
NOTA: Algunas aplicaciones CLI (Mal programadas según mi opinión) distinguen entre mayúsculas y minúsculas por lo que hay que escribir correctamente el parámetro según se indique (-help, -HELP).






  • En busca del error


Si algún script te tira error y desconoces el motivo, hay dos técnicas muy útiles para intentar localizar la causa del error.

1º - Ejecuta el script directamente desde la CMD escribiendo la ruta del script (No haciendo doble click sobre el script), de esta manera la CMD no se cerrará y podrás ver la información del error.

2º - Usa el comando [b]Echo para mostrar el contenido de las variables o los comandos de los que sospeches que están causando el error.

Por ejemplo, tenemos este código que hace una comparación condicional, pero la comparación no nos funciona y no sabemos porqué:
Código:
@Echo OFF
Set "Variable=Valor"
if "%VARIABLE%" EQU "Valoor" (Echo Si)
Pause >NUL
  
El ejemplo es muy fácil para todos, lo sé, pero si tenemos un código con más de 100 líneas y tenemos las variables desperdigadas por el código, no sabemos donde está cada cosa, etc, etc... la cosa se complica!, por eso esta solución nos servirá en todas esas ocasiones.

Usariamos la línea de la que sospechamos como línea de comentario, y una línea más arriba pegariamos la línea pero usando el comando Echo, para mostrar lo que no podemos ver a simple vista en el script:

Código:
@Echo OFF
Set "Variable=Valor"
ECHO if "%VARIABLE%" EQU "Valoor" (Echo Si)
REM if "%VARIABLE%" EQU "Valoor" (Echo Si)
Pause >NUL
  


El error salta a la vista, lo hemos encontrado y solucionado.






  • Productividad (1)


Hay que intentar ser productivos con nuestros scripts y adecuar nuestro lugar de práctica,
no es lo mismo empezar a programar nuestro código abriendo el bloc de notas, que hacerlo en un editor de código profesional especializado en ello,
este tipo de editores por lo general te corrigen o te avisan automáticamente de los errores tipográficos que hayas cometido, y creéme, al empezar se cometen demasiados errores.
También colorean las diferentes partes de un código, y eso al principio te ayudará a entender mejor que es cada cosa, y donde dese estar situada.

Un editor de código es la mejor manera para empezar en esto, te ayudará a separar, encontrar, y entender las partes de un script, y aprenderás el manejo en menor tiempo que con el bloc de notas.

Veámos las diferencias que nos aportan cada uno:

Notepad
  • NADA
    Ah, si... el botón "buscar" (xD)


Editor
  • Auto-corrección
    Auto-indentación
    Auto-completado (de palabras/comandos)
    Resalto en colores de la sintaxis
    Colores ajustables de letra y fondo para descansar la vista
    Un sin fín de opciones variadas que suelen tener cualquier editor como por ejemplo "ordenar lineas", multi-seleccionar líneas o palabras al mismo tiempo, y multi búsquedas.


Si quieres mi recomendación, la mejor elección para codear scripts Batch es el editor Sublime Text Editor, aunque muchos otros optan por el editor Notepad++
Sublime Text > http://www.sublimetext.com/2
Notepad++ > http://notepad-plus-plus.org/






  • Productividad (2)


Seguramente no sepas que puedes crear tu propia plantilla de trabajo personalizada para tus archivos BAT, y seleccionar esta nueva plantilla en el menú contextual de crear nuevos archivos:



Pues así es, se puede conseguir, y con ello se ahorra una considerable cantidad de tiempo si la plantilla está adecuada a tus necesidades...

Aquí tienes mi plantilla por defecto, y un archivo de registro que es necesario para agregar esta nueva opción (Solo lo he testeado en Windows 7).

Plantilla.bat
Código:
@Echo OFF
TITLE Plantilla Batch por defecto by Elektro H@cker

Setlocal enabledelayedexpansion

Set    "VAR="
Set /A "NUM=0"


:: IF "%VAR%" EQU "" (PAUSE)

:: FOR /F "Usebackq Tokens=* Delims=" %%@ IN ("") DO ()
:: FOR /L %%@ IN (0,1,10) DO ()
:: FOR /R %%@ in (*) DO ()
:: FOR %%@ IN () DO ()


Pause&Exit
  
Plantilla.reg
Código:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.bat\ShellNew]
"NullFile"=""
"Filename"="Plantilla.bat"

[HKEY_CLASSES_ROOT\batfile]
"FriendlyTypeName"="Batch Script"
  
PD: La plantilla se debe guardar en la ruta C:\Windows\ShellNew\Plantilla.bat para que tenga efecto.






  • Ética


La programación no fue creada con el fín de hacer el mal, ni virus, ni autoruns, ni nada por el estilo, Aquí puedes aprender lo básico para crear una bomba lógica, pero si buscas un tutorial orientado a dañar sistemas operativos en estas páginas no lo vas a encontrar.

Intentar superarse a uno mismo realizando cada vez scripts más complicados es una cosa genial y llena de mérito!, pero lo que no es tiene nada de mérito es copiar códigos de terceras personas en tu propio beneficio (Buscando puro reconocimiento inmerecido), es un acto de inmadurez el cual personalmente desprecio.

Si copias algo, pide permiso al autor del código, si ves dificil la taréa de contactar con el, pon agradecimientos/créditos en tu code haciendo referencia a los códigos que has obtenido de terceras personas, pues quien sabe si en un futuro llegas a ser un excelente programador y te achacan de copión, lammer, y ladrón, por no haber puesto los créditos necesarios en tus scripts... No cuesta nada!
jino139 le gusta esto.
__________________
EleKtro está desconectado  
Los Siguientes 2 Usuarios Agradecieron a EleKtro por Este Mensaje:
jino139 (25-feb-2013), pax01 (25-feb-2013)
Antiguo 25-feb-2013, 16:50   #4
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.958
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

3. LOS PRIMEROS PASOS






  • 3.1 Una Identidad


Estamos a punto de crear algo nuestro, es casi como de nuestra sangre y por eso lo vamos a tratar como si fuese nuestro hijo, nuestro fruto,
Vamos a bautizar nuestro script con un nombre!

Otorgarle un nombre a un script sirve para identificar que archivo bat está ejecutando la CMD, o simplemente dejar nuestra firma en el, y para ello utilizaremos el comando Title

Este paso lo haremos directamente abriendo la CMD y escribiendo:
Código:
Title Elektro Junior
  


Podemos comprobar como la barra de título de la ventana ha cambiado.
jino139 le gusta esto.
__________________
EleKtro está desconectado  
Los Siguientes 2 Usuarios Agradecieron a EleKtro por Este Mensaje:
jino139 (25-feb-2013), pax01 (25-feb-2013)
Antiguo 25-feb-2013, 16:53   #5
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.958
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • 3.2 La Voz


Si queremos expresarnos para mostrar cualquier cosa que se nos ocurra en la pantalla, o si queremos mostrar cualquier tipo de información, tendremos que usar el comando Echo

Este comando es uno de los más sencillos de aprender y en el ejemplo lo usaremos directamente en la CMD.

Se puede mostrar un mensaje de dos maneras,

La primera manera es:
Código:
Echo Mensaje
  
La segunda manera es añadiendo el caracter + o : o . de esta forma:
Código:
Echo. Mensaje
Echo: Mensaje
Echo+ Mensaje
  
La única diferencia es que la segunda manera añade un espacio al principio del mensaje.

Si queremos mostrar una línea en blanco usaremos siempre la segunda manera, pero sin escribir ningún mensaje:

Código:
Echo.
  
Código:
Echo:
  
Código:
Echo+
  
Aquí podeis ver las diferencias:


TIP: Para no llenar nuestros scripts de interminables comandos Echo+ podemos mostrar un mensaje y añadir una línea en blanco debajo, usando el comando MORE de esta manera:
Código:
Echo Mensaje | MORE
  
TIP: Podemos usar el comando MORE cuantas veces queramos (Se añadirá una línea en blanco por cada uso):
Código:
Echo Mensaje | MORE | MORE | MORE | MORE
  
__________________
EleKtro está desconectado  
Antiguo 25-feb-2013, 16:53   #6
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.958
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • 3.3 El Silencio


La CMD siempre se encargará de mostrar todas las líneas que se van procesando de un script (resulta muy molesto), a menos que le indiques que no quieres que te informe de esos datos.

La "voz" de la CMD se puede activar/desactivar usando el parámetro ON y OFF comando Echo:
Código:
Echo OFF
  
Código:
Echo ON
  
Como norma general en la primera línea de nuestros scripts siempre usaremos ese comando para desactivar "la voz", aunque en un script le tendremos que añadir el caracter @ así:
Código:
@Echo OFF
  
Esa sí que será nuestra primera línea del script !!

NOTA: El caracter @ indica que el comando que le prosigue a la derecha de él no devuelva "el echo", así que cualquier línea que empiece con el caracter @ no devolverá "la voz" de la CMD.

NOTA: Por defecto Echo siempre está activado (ON)

Algunos comandos también nos dirán cosas innecesarias, para silenciar el echo (o salida) de un comando utilizaremos el operador de redirección >, así:
Código:
Comando >NUL
  


PD: Más tarde aprenderemos a redireccionar y aprenderemos que es "NUL".
__________________
EleKtro está desconectado  
El Siguiente Usuario Agradeció a EleKtro Por Este Mensaje:
pax01 (25-feb-2013)
Antiguo 25-feb-2013, 16:53   #7
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.958
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • 3.4 La escritura


En la vida real es muy importante saber escribir, y sobretodo saber escribir bien, con sus comas, sus puntos, sus punto y coma, etc...
Si no escribes algo correctamente quizás una persona no pueda entender tu escritura y se confunda, pues en Batch sucede lo mismo.

Las comillas, las comillas son un elemento IMPRESCINDIBLE, las debes usar extremadamente para casi todo, muchos errores en los scripts son causa de no haber usado las comillas apropiadamente (o un uso indebido de otros operadores).

Más adelante lo explicaré con detalles.
__________________
EleKtro está desconectado  
El Siguiente Usuario Agradeció a EleKtro Por Este Mensaje:
pax01 (25-feb-2013)
Antiguo 25-feb-2013, 16:53   #8
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.958
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • 3.5 La lectura


Cuando séas un experto en Batch lograrás hacer códigos complejos y con cientos o miles de líneas de código, solo de imaginarlo... puede resultar algo lioso la lectura, ¿Verdad?

Por suerte todo lenguaje de programación/scripting tiene soporte para añadir líneas de comentarios a los scripts, podemos usar estas líneas de comentario para fácilitar la lectura del script, como recordatorio personal para no olvidar que hace una función, o para añadir información extra para el usuario.

El comando para añadir una línea de comentario es REM

Código:
@Echo OFF
REM Esto es una línea de comentario
Pause >NUL
  
NOTA: Una línea de comentario no interfiere con los operadores de Batch, es decir, puedes escribir todos los caracteres que desees sin encerrarlos entrecomillas.
__________________
EleKtro está desconectado  
Antiguo 25-feb-2013, 16:54   #9
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.958
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • 3.6 Caminar


Un script no tiene patas, pero la ejecución del código no se detiene, y si no hacemos algo para detenerla, la ventana de la CMD se cerrará al finalizar la ejecución de nuestro código, muchas veces sin darnos opción a ver que está pasando.

Se puede detener la ejecución usando el comando Pause.

Un ejemplo:
Código:
@Echo OFF
Echo Esto es un test !
Pause
  
TIP: Para silenciar el echo del comando Pause lo usaremos de esta manera:
Código:
Pause >NUL
  


Muchas veces necesitaremos dividir nuestro script en bloques, en varías partes imaginarias (o no tán imaginarias) y dirigirnos hacia esa parte, como por ejemplo las subrutinas.

Una parte de un script se tiene que dividir usando las denominadas etiquetas

Una etiqueta se identifica porque siempre lleva el caracter : delante del nombre, así:

Código:
:Soy una etiqueta
  
Debajo de la etiqueta se puede colocar las líneas de código que deseemos, esas líneas formaran un conjunto con la etiqueta y por eso tenemos que imaginarla como una "parte" imaginaria dividida del scirpt, ya que esas líneas solo se procesarán si se llama a la etiqueta (O si se procesa secuencialmente sin haber llamado a ninguna etiqueta antes).

Para "caminar" hacia una etiqueta usaremos el comando GOTO seguido del nombre de la etiqueta a la que queremos ir.

Véamos un ejemplo de todo esto:

Código:
@Echo OFF

Goto :Etiqueta_2

:Etiqueta_1
Echo Estoy en la etiqueta 1 !

:Etiqueta_2
Echo Estoy en la etiqueta 2 !

Pause>NUL
  


Como se puede comprobar, el contenido de la "Etiqueta_1" no se llega a procesar porque una línea más arriba se procesa primeramente el comando GOTO y este se dirige directamente a la "Etiqueta_2", omitiendo todo el contenido de código que haya antes de dicha etiqueta.

NOTA: Jamás escribiremos nombres de etiquetas con espacios en el nombre, ya que todo lo que haya después del espacio se asignaría como un argumento de la etiqueta.

NOTA: Puede haber uno o varios espacios entre el comando y el nombre de la etiqueta:

Código:
Goto:Etiqueta
Goto :Etiqueta
Goto            :Etiqueta
  
__________________
EleKtro está desconectado  
Antiguo 25-feb-2013, 16:54   #10
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.958
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • 3.7 Memorizar


Llegamos a un punto interesante, aprenderemos a memorizar las cosas usando las variables.

Como ya expliqué, una variable es un espacio virtual donde podemos almacenar datos/valores.

Podemos bautizar a una variable con el nombre que deseemos.

Para guardar un valor en una variable usaremos el comando SET
Código:
Set MiVariable=Valor
  
NOTA: La acción de crear una variable (usar el comando set) se denomina "Setear".

Pero como ya expliqué que las comillas son muy importantes PARA TODO, nos acostumbraremos a setear utilizando comillas, es muy importante hacerlo aunque no es obligatorio.
Código:
Set "MiVariable=Valor"
  
Y en algunos casos muy especiales las deberemos usar así:
Código:
Set MiVariable="Valor"
  





Para que el intérprete de comandos reconozca una variable, debemos escribirla seguido del caracter % dos veces.
Código:
%MiVariable%
  
Véamos un ejemplo:
Código:
@Echo OFF
Set "Variable=Esto es lo que hay dentro de la variable"
Echo %VARIABLE%
Pause >NUL
  


Ahora otro ejemplo, sin usar las comillas:
Código:
@Echo OFF
Set Variable=Valor1_&_Valor2
Echo %VARIABLE%
Pause >NUL
  


¿Ves lo que sucede por no usar las comillas EN TODO?
Al no encerrar la variable con las comillas dobles y al mismo tiempo haber usado el caracter reservado de Batch &, el intérprete entiende que todo lo que hay a la derecha del caracter & es un comando, y dará error.



TIP: Se puede eliminar de la memoría una variable simplemente seteando el nombre de la variable, sin añadir ningún valor, de esta forma:
Código:
Set "Variable="
  


[size=12pt]Aquí terminan nuestros primeros pasos, enhorabuena, ya estás preparado para comprender mejor las cosas.[/size]
pax01 le gusta esto.
__________________
EleKtro está desconectado  
El Siguiente Usuario Agradeció a EleKtro Por Este Mensaje:
pax01 (25-feb-2013)
Antiguo 25-feb-2013, 16:55   #11
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.958
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

4. OPERADORES



Estos son los operadores de Batch:

Operadores de ejecución condicional:

& - AND
&& - IF
|| - OR

Operadores de ejecución condicional simulada:

&= - AND
^= - (Exclusive OR) XOR
|= - OR

Operadores de exclusión:

^ - (Exclusive OR) XOR

Operadores de comparación:

== - (EQUAL) igual

EQU - (EQUAL) igual
NEQ - (NON EQUAL) distinto
LSS - (LESS) menor que
LEQ - (LESS OR EQUAL) menor que o igual
GTR - (GRATER) mayor que
GEQ - (GREATER OR EQUAL) mayor que o igual

Operadores de agrupación:

( ) - Agrupadores

Operadores de desplazamiento lógico (o Redireccionamiento):

> - (Right shift) RSH
>> - (Right shift) RSH
< - (Left shift) LSH
| - PIPE

Operadores aritméticos y de asignación:

+ - Suma
- - Resta
* - Multiplicación
/ - División
% - Módulo

= - Asignar valor

+= - Suma en variable
-= - Resta en variable
*= - Multiplicación en variable
/= - División en variable
%= - Módulo en variable

<<= - LSH (Left Shift) en variable
>>= - RSH (Right Shift) en variable

Separadores de expresión:

, - Separador

Otros operadores:

@ - AT
::
""
%
!
?
* - Wildcard (o Comodín)
.
..
\
__________________
EleKtro está desconectado  
El Siguiente Usuario Agradeció a EleKtro Por Este Mensaje:
pax01 (25-feb-2013)
Antiguo 25-feb-2013, 16:58   #12
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.958
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • 4.1 Operadores de Ejecución condicional



  • & (AND)


Este operador se usa para concatenar comandos, para ejecutarlos por orden, unos seguidos de otros.

Ejemplo:
Código:
@Echo off
Pause & Pause
  
NOTA: Los comandos se ejecutan sin excepción.






  • && (IF)


A diferencia del operador &, al usar && el comando que le proceda a la derecha solo se ejecutará si el primer comando tiene éxito (sin errores).

Ejemplo de error:
Código:
@Echo OFF
Dir /B FAIL && Echo SUCCEED
Pause
  
Ejemplo de éxito:
Código:
@Echo OFF
Dir /B * >NUL && Echo SUCCEED
Pause
  





  • || (OR)


Al usar || el comando que le proceda a la derecha solo se ejecutará si el primer comando falla (cualquier tipo de error).

Ejemplo de error:
Código:
@Echo OFF
Dir /B SUCCEED || Echo FAIL
Pause
  
Ejemplo de éxito:
Código:
@Echo OFF
Dir /B * >NUL || Echo FAIL
Pause
  
NOTA: Un comando exitoso (sin errores) mandará un código de error [b]%ERRORLEVEL% de "0"
__________________
EleKtro está desconectado  
Antiguo 25-feb-2013, 16:58   #13
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.958
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • 4.2 Operadores de Ejecución condicional simulada


Estos operadores no se pueden usar directamente en Batch ni escribirlos en un script, deben ser simulados, debemos imaginarnos la situación y actuar como si pusiesemos el operador en práctica.

Un ejemplo muy claro sería una comparación multi-condicional (Varías condiciones):
Código:
@Echo off
if 5 equ 5 if 3 equ 3 (Echo true) else (Echo false)
Pause >NUL
  


En Batch no se puede usar el operador & como operador lógico, por eso el intérprete lo simula en segundo plano.

Para que algunos puedan entenderlo mejor, el código traducido a algún otro lenguaje de programación equivaldría a esto:
Código:
if 5 == 5 & if 3 == 3 (print "true") else (print "false")
  
__________________
EleKtro está desconectado  
Antiguo 25-feb-2013, 16:59   #14
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.958
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • 4.3 Operador de exclusión



  • ^ (XOR)


En algunas ocasiones no querremos que Batch procese los operadores como operadores, sinó como caracteres alfabéticos.

A la acción de usar el caracter ^ se le llama escapar.

Este operador sirve entre para excluir de la interpretación a un operador especial (Incluido el mismo operador XOR).

Pongamos unos ejemplos:

Código:
@Echo off
Echo Hola ^| MORE
Pause >NUL
  


Código:
@Echo off
Set "VARIABLE=ABC"
Echo ^%%VARIABLE^%%
Pause >NUL
  


Código:
@Echo off
Echo Hola ^^
Pause >NUL
  


NOTA: También se puede evitar el interpretado de los operadores encerrando el string con comillas dobles, y esto es otra razón de porque són tán importantes las comillas.
__________________
EleKtro está desconectado  
Antiguo 25-feb-2013, 16:59   #15
Gran Colaborador
 
Avatar de EleKtro
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 20
Mensajes: 1.274
Gracias: 1.958
Agradecido 407 veces en 287 mensajes.
Predeterminado Respuesta: Tutorial extendido de aprendizaje Batch (by Elektro H@cker)

  • 4.4 Operadores de agrupación



  • ( )


El operador de agrupación en realidad son dos caracteres distintos pero que han de usarse combinadamente, ( y ).

Nunca se debe dejar abierta una agrupación, por lo tanto como norma general por cada caracter ( (usado como operador) debe existir la misma cantidad del caracter ) en el script, de lo contrario dará error de sintaxis.






  • Agrupación de una línea


1er Ejemplo:
Código:
@Echo off
(Echo Agrupacion 1 & pause)
  
Hemos agrupado (y concatenado) el comando echo y el comando pause , pero la agrupación hay que usarla con algún propósito y en este ejemplo no es necesario usar la agrupación, solo es para que aprendais a agrupar.

2º Ejemplo:
Código:
@Echo off
(Echo Agrupacion 1 & Dir /B FAIL) || (Echo Agrupacion 2 & Pause)
  
Hemos agrupado a la izquierda una serie de 2 comandos concatenados, y en la derecha otra agrupación de 2 comandos,
Los comandos que estén dentro de una agrupación cuentan como "un solo comando", si cualquiera de ellos da error, al usar el operador de ejecucón condicional || se procesará la segunda agrupación del ejemplo.

3er Ejemplo:
Código:
@Echo off
(Echo Agrupacion 1 & Dir /B FAIL) || (Echo Agrupacion 2) & Pause
  
Aquí hay una pequeña modificación, el comando pause no tiene agrupación.
Las reglas son las mismas que las de la explicación del 2º ejemplo, solo que el comando pause al no estar agrupado, se procesará sín excepción alguna (Se procesará incluso aunque no fallase la comparación del operador ||).
En este último ejemplo es donde mejor se puede apreciar la importancia de hacer correctamente una agrupación.






  • Agrupación multi-línea


Se pueden realizar agrupaciones de varias líneas.


1er ejemplo:
Código:
IF 1 EQU 1 (
    echo 1
    echo 2
    echo 3
)
  

2º Ejemplo:
Código:
@Echo OFF

(
  IF 1 EQU 1 (
      echo 1
      echo 2
      echo 3
  ) & (
     IF 2 EQU 2 (
               echo 4
               echo 5
               echo 6
     ) 
  ) 
) > "Archivo.txt"

Type "Archivo.txt"
Pause >NUL
  


(El 2º Ejemplo lo hice con mala leche, vale! xD)
__________________
EleKtro está desconectado  
Tema Cerrado

Herramientas
Desplegado

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

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



Temas Similares
Tema Autor Foro Respuestas Último mensaje
generador de virus batch by condor v2.2 apdv2.12 CodeCommand 10 30-oct-2012 11:55
~ Videotutorial de C++ ~ | 29 Capítulos + Instalación | pax01 Carbide C/C++ 0 15-ene-2012 20:21
Tutorial Programación Batch - completo - GUN$ Batch / Bash-Shell 5 04-dic-2011 17:42



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