lunes, 15 de diciembre de 2014

Introducción a programar en Bacth

Comandos básicos en Batch



Echo:
    El comando más conocido dentro del área de la consola de Windows es "echo" y su función es muy simple, imprimir en algo en la consola.

    Se me pueden dar otros usos, como por ejemplo Exportar un resultado a un archivo de texto.


Su sintáxis es la siguiente:
    Echo ["texto",%variable%]
    Echo off: Deshabilita el eco en la consola evitando mostrar el proceso de cada comando.
Para guardar el contenido en un texto plano se usa la siguiente sintáxis:
    Echo hola, ¿como estas?>[ruta,nombre archivo,extension(opcional)]

Ejemplos:
    Echo Esto es un texto normal.
    Echo La hora actual es: %time%.
    Echo Resultado de una variable>%userprofile%\Resultado.txt
  -------------------------------------------------------------------------------------------------------------------------------------

Set:
    El comando "set" es otro comando muy utilizado y es vital para programar en Batch.
    Su función es guardar algo (variable, numeros, caracteres, etc) en una variable, la cual podemos usar, modificar o eliminar a nuestro antojo.
    El comando "set" posee dos modificadores: "/A" que se usa para realizar evaluaciones matemáticas como sumar, restar, etc ; "/P" que se ultiliza para el ingreso de texto mediante el teclado.

Su sintáxis es la siguiente:
    Set [modificador, nombre de variable,signo "=", valor de variable]
   
Ejemplos:
    Set NumDeManzanas=1
    Set /A NumDeManzanas=%NumDeManzanas%+1 (El restultado es 2)
    Set /P Resultado=Cuantas manzanas hay?:

    NOTA: Cuando se usa el modificador "/P" es opcional agregar un texto luego de la variable.
        Ejemplo: Set /P Resultado=
             Set /P Resultado=[texto opcional]
    Ambas formas funcionan sin dar error.

-------------------------------------------------------------------------------------------------------------------------------------

If:
    El comando "If" es utilizado para realizar comparaciones, ya sea de variables, numeros o caracteres.
    A este comando se le pueden añadir varias funciones por medios de modificadores y es muy completo.
    "If" es utlizado también para la comprobación de archivos lo cual es muy útil al momento de programar algunas cosas.

    Los modificadores al comando son: "/I" que compara omitiendo mayúsculas y minúsculas; "NOT" hace que funcione el comando si la condición es falsa; "EXIST" Comprueba la existencia de un archivo.
   
    Operadores de comparación:
                EQU - igual (Se puede utilizar también "==")
                NEQ - no igual
                LSS - menor que
                LEQ - menor que o igual
                GTR - mayor que
                GEQ - mayor que o igual

Su sintáxis es la siguiente:
    Comparación de variables
    If [variable, operador de comparacion, variable, comando a realizar si se cumple la comparación]

    Comprobación de archivos
    If [modificador Exist, ruta, comando a realizar si se comple el requisito]

Ejemplos:
    If %NumDeManzanas% == %NumDeNaranjas% Echo Hay la misma cantidad de Manzanas que de Naranjas.
    If %NumDeManzanas% GTR 3 Echo Tienes muchas manzanas, me regalas una?
    If Exist C:\Windows Echo Tienes el sistema operativo Windows instalado.
    If NOT Exist C:\Windows Echo No tienes el sistema operativo Windows instalado.
--------------------------------------------------------------------------------------------------------------------------------------

For:
    El comando "For" es uno de los comandos más útiles y completos de Batch y por lo que he visto en la red es uno de los que más le cuesta usar a la gente.
    Este comando realiza una dicha cantidad de tareas según se requiera, desde recorrer un directorio buscando un archivo hasta hacer una bucle con otro "For", entre otras cosas.

    Los modificadores de "For" son los siguientes: "/D" recorre directorios dados por nosotros; "/R" recorre desde el directorio dado por nosotros hasta la última carpeta dentro del mismo ordenadamente;
    "/L" forma un ciclo de sucesiones numéricas; "/F" recorre un archivo o variable, lo abre y lo lee, mostrando la primera línea o palabra de contenido. A este modificador se le pueden agregar más funciones (opciones):
   
    eol:      Se asigna un caracter (solo uno) para seperar lo que es comentario del texto a utilizar.

    skip:     Asigna el número de línea que el comando se saltará antes de leer el contenido.

    delims:   Asigna delimitadores para separar el contenido.

    tokens:   En esta opción se especifica que parte del contenido queremos mostrar seleccionando la "posición" del mismo a la vez que son guardador en variables alfabéticas.

    usebackq  Esta opción es algo extraña para mi. Lo que hace es cambiar la simbología del ingreso de comandos, ruta, texto. (Es la forma en que reconoce esas entradas)
            Ejemplo: Para ingresar la búsqueda en un comando se utiliza las comillas simples ('comando') y con esta opción queda así (`comando`)
                 Para ingresar la búsqueda en un archivo se utiliza solo los paréntesis (nombre de archivo) y con esta opción queda así ("nombre archivo")
                 Para ingresar la búsqueda en un texto se ultiliza las doble comillas ("texto") y con esta opción queda así ('texto')
                Es algo extraño, por lo menos para mi, que exista esta opción.

Su sintáxis es la siguiente:
    Normal
    For [variable de una letra anteponiendo % (%a), IN, (conjunto o listado de archivos), DO, comando a realizar en el conjunto]

    Modificadores
    For [/D, variable de una letra anteponiendo % (%a), IN, (conjunto o listado de directorios), DO, (comando a realizar en el conjunto)]
    For [/R, Ruta, variable de una letra anteponiendo % (%a), IN, (conjunto o listado de archivos), DO, (comando a realizar en el conjunto)]
    For [/L, variable de una letra anteponiendo % (%a), IN, (número de inicio, aumento o disminución, número final), DO, (comando a ralizar en cada aumento o disminución)]
    For [/F, opciónes, variable de una letra anteponiendo % (%a), IN, ('comando', archivo, o "texto"), DO, (comando a realizar)]

Ejemplos:
    For %a IN (primero segundo tercero cuarto) DO (Echo Este es %a contenido)

    For /D %a IN (mu*) DO (Echo Los directorios que empiecen con "mu" en esta ruta son los siguientes: %a)
    For /R %tmp% %a IN (*.txt) DO (Echo usted tiene los siguientes archivos de texto en esta ruta: %a)
    For /L %a IN (1,1,100) DO (Echo Mira, se contar hasta 100: %a)

    For /F %a IN ("%time%") DO (Echo La hora es :%a)
    For /F "eol=x" %a IN ("Contenido x Comentario") DO (Echo %a)
    For /F "tokens=1-7,10* delims=" %a IN ("Hola, soy Codex y me gustan las peras o las manzanas") DO (Echo %a %b %c %d %e %f %g %h %i)

    Nota: Para guardar el contenido del "For" en una variable en un archivo por lotes (".Bat", ".Cmd" o ".Com") se usa doble %. Ejemplo: %%a, %%b, %%c, etc.

4 comentarios:

Yamasu331 dijo...

Las clases online no sirven
Jejej

CodexOscura dijo...

Hola,
Si necesitas ayuda con algún programa o concepto, aquí puedes preguntarme y responderé cuando pueda.
Saludos!

Anónimo dijo...

Hola, estoy tratando de crear un batch sencillo que elimine los archivos respaldo cuya fecha sea del mes pasado.

Para esto mis archivos dentro del nombre tienen la fecha, algo asi: respaldo_2022_09_22.bak

Quiero crear un batch donde puede restar 1 al mes para que pueda poner esto:
del respaldo_2022_%mes%*.bak

Me puede ayudar por favor?

CodexOscura dijo...

Hola!, claro, te puedo ayudar, pero primero debes definir bien lo que necesitas, ya que si quieres que te cambie el mes (en donde aplica para borrar archivo) del nombre del archivo, si por ejemplo tienes un archivo con fecha 30-01-23 y la fecha actual es 01-02-23 te darás cuenta que son solo días de diferencia y quizá no sea lo que necesitas.

Coméntame más detallado y te puedo generar un script configurable.

Saludos!