Seguimos con esta serie de post más teóricos, pero esta vez vamos con algo de lo más básico imaginable, como son los comandos de windows y el procesamiento por lotes.
En Windows 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 instrucciones MS-DOS
Comandos Básicos
Hay una serie de comandos básicos de MS-DOS con los que trabajaremos constantemente que son los siguientes:
Comando | Función |
HELP | Muestra la ayuda (Obvio) |
DIR | Muestra el directorio |
TREE | Muestra el árbol de directorios |
CD | Cambiar directorio |
Mkdir o md | Crea un directorio |
Rmdir | Borra directorio |
Deltree | Borra árbol |
Doskey | Guarda el historial de los comandos introducidos (MS-DOS) |
Chkdsk | Chequea el disco |
Format | Formatear (Obvio) |
Fdisk / DiskPart | Muestra el particionado del disco. En windows 10 es DiskPart |
Attrib | Ver atributos |
Type | Muestra contenido de un archivo |
Rename o ren | Cambia el nombre de un archivo |
Copy | Copia archivos |
xcopy | Realiza copia de archivos y subdirectorios |
cls | Limpia la pantalla |
Find | Busca en un archivo |
Operadores especiales
Operador | Significado |
* | Operador especial que implica Todo. |
? | Operador especial que implica una letra cualquiera. |
Ejemplos:
copy *.bat A: (Esto copiaría todos los archivos cuya extensión sea .bat a la unidad A:)
copy hola.* A: (Esto copiaría todos los archivos que se llamasen hola con cualquier extensión a la unidad A:)
copy hola.ba? A: (Esto copiaría todos los archivos que se llamasen hola y cuya extensión sea las dos primeras letras ba y la ultima cualquiera,ej; hola.baz , hola.ba3, hola.bau a la unidad A:)
copy hola.??a A: (Esto copiaría todos los archivos que se llamasen hola y cuya extensión las dos primeras letras sean cualquieras y la ultima se a, ej; hola.hga, hola.iua, hola.rta, a la unidad A:)
Redireccionamientos
Hay dos tipos de redireccionamiento de salida o de entrada
Redirecionamiento de salida: Saca la salida de texto de un programa a un archivo o la elimina enviandolo a NUL
Como vemos en el ejemplo hemos redirecionado la salida del comando (que en este caso era lo de presione una tecla para continuar ) a NUL ,aunque tambien podiamos haber puesto que lo redirecione a un archivo si queremos conservar esa salida
Si hacemos el redirecionamiento de esta forma a un archivo esto machaca el contenido del archivo
La forma de que no lo machaque es haciendo el redirecionamiento con >>, lo cual significa que conserve lo que tenia mas lo añadido.
Redirecionamiento de entrada: Mete una cadena de texto a un programa
En este ejemplo utilizamos el comando sort para ordenar y el modificador /r (reverse) para indicar que queremos que nos ordene al reves la cadena de texto introducida mediante el archivo hola.txt
ECHO
El comando Echo cumple 3 funciones distintas segun el uso:
echo «texto» | Muestra el texto |
echo. | Salto de linea (como una linea de texto vacia lo interpreta) |
echo off/on | Activa y desactiva el eco |
¿Que es eco? El eco consiste en la repeticion producida al mostrar el comando al ejecutarlo,con el siguiente ejemplo lo entendereis perfectamente
Formas de desactivar el ECO:
- 1º Poniendo antes del comando @
- 2º Poniendo ECHO OFF
Como tambien es de interes quitarle el eco al echo off se suele poner @Echo off
Filtros
Para introducir un filtro de como queremos que se muestre la salida debemos poner una tuberia | (Este simbolo) despues del comando. Los filtros mas habituales son:
Filtro | Función |
find | Busca la cadena de texto |
sort | Ordena |
more | Muestra hasta que se llene la pagina y para hasta que pulses un boton y luego sigue |
Aqui dejo unos ejemplos, podeis ver como varia la salida segun que filtro:
Parametros
Un parametro es una variable cuyo valor se fija a voluntad.Los parametros en MS-DOS se escriben a continuacion del archivo.bat
Ejemplo:
En MS-DOS podemos establecer hasta nueve parametros,utilizando la siguiente simbologia %1 %2 %3 %4 %5 %6 %7 %8 %9 .Si pusieramos %10 el ordenador lo interpretaria como el parametro uno + 0 -> %10 = %1+0 , si %1 es Hola , %10 seria Hola0
Los parametros nos permiten realizar un monton de acciones dado que nos permite fijar el valor que deseamos a voluntad, veamos un ejemplo practico
Ahora lo ejecutaremos:
Condiciones
Para establecer una estructura condicional utilizarimos IF (El cual se puede traducir por el si condicional). Estas estructuras condicionales son muy similares a la gramatica inglesa del primer condicional. Para entender estas estructuras condicionales me basare en la estructura de la gramatica inglesa.
Como se ve en esta imagen podemos distinguir dos partes la condicion y la consecuencia. La particula if va ligada a la condición. Ahora veremos algunas de las particulas que siguen al IF en MS-DOS y su significado:
IF EXIST | Si existe |
IF NOT EXIST | Si no existe |
IF » » == » » | Si lo introducido en el primer lado de la igualdad es igual a lo segundo |
IF NOT «»== «» | Si lo introducido en el primer lado de la igualdad NO es igual a lo segundo |
IF ERRORLEVEL | Lo veremos más adelante con el choice esta opción |
Y en cuanto a la parte del resultado o condicion esta se pondría a continuación, ahora mostrare algunos ejemplos:
IF %1 NOT EXIST GOTO :ERROR -> Si el parametro uno no existe vete a error
IF "%3"=="" GOTO :dosparametros -> Si el parametro 3 esta en blanco , es decir no hay parametro GOTO :dosparametros
Tener en cuenta que este tipo de estructuras va muy ligada a parametros , variables y etiquetas. Normalmente los parametros y variables a la parte de la condición y las etiquetas en la parte del resultado
Etiquetas
¿Que es una etiqueta? Es un conjunto de caracteres que sirven para identificar instrucciones o datos.En MS-DOS las etiquetas se establecen con : y el nombre da la etiqueta. Ejemplo :Etiqueta1, el nombre de las etiquetas son arbitrarios.Una de las principales utilidades que tiene es hacer «saltos» en el codigo es decir ir directamente (GOTO) a la etiqueta sin interpretar el codigo anterior
Ejemplo:
Preguntas
En MS-DOS es posible preguntar al usuario que quiere hacer utilizando la opción CHOICE. CHOICE cuenta con varios modificadores que hay que saberse:
Modificador | Función |
/C 1234 | Establece como opciones 1,2,3,4 |
/T 10 | Establece un temporizador que eligira la opcion por defecto si no ha elejido nada en 10 segundos. |
/D 1 | Establece la opcion por defecto |
/N | Oculta las opciones en la pregunta y el simbolo de ? final |
/M | Muestra un mensaje personalizado |
Ejemplo de uso:
CHOICE /C 1234 /T 10 /D 1 /M "Que opcion desea ejecutar"
Pero tal como esta puesto ahora no haria nada el codigo ,ni hara algo diferente segun la opcion que pulsemos . Para ello esta otro uso de la particula IF , IF ERRORLEVEL.
IF ERRORLEVEL va inmediatamente despues del choice y se ha de poner según LA POSICIÓN (no la opción).
¿Y el IF ERRORLEVEL 0? Este se produce cuando pulsamos control+c para cancelar la ejecucion del archivo por lotes y luego le decimos que no queremos cancelar la ejecución por ello siempre es conveniente poner en IF ERRORLEVEL 0 una etiqueta al principio para reiniciar la ejecucion o aun mensaje de error.
LLamadas a otro .bat
Hay dos forma de ejecutar otro programa .bat desde un bat y son las siguientes:
- La primera poniendo el nombre del archivo . bat o su ruta directamente (con path)
Esto haria que se ejecute el archivo Dos.bat pero la linea de abajo de ya he vuelto no se interpretara
- La segunda usando el comando CALL
En este caso tras ejecutar Dos.bat se ejecutaria luego el Echo ya he vuelto del segundo bat.
Bucles FOR
Esto quizas sea ,una de las cosas con sintaxis mas complejas de MS-Dos . Los bucles FOR permiten ejecutar un comando para cada uno de los elementos especificados en la lista:
FOR %NombreVariable IN (lista) DO comando <-- desde línea de comandos
FOR %%NombreVariable IN (lista) DO comando <-- dentro de archivos BAT
NombreVariable: Un nombre de variable de un único carácter, que se utilizará para recorrer los archivos de la lista,va tomando los valores de cada elemento de la lista.
OjO: La variable diferencia si es MAYÚSCULA o minúscula.
(lista): Especifica un conjunto de elementos archivos separados por coma, punto y coma o espacio en blanco.Si en la lista aparecen comodines ( ? o * ) el comando se ejecutará para cada uno de los archivos que cumplan la expresión regular.
Ejemplo 1:
FOR %%A IN (*.*) DO ECHO %%A
Si hubieramos puesto:
FOR %A IN (*.*) DO ECHO hola
En este caso el comando a ejecutar sera echo hola y la lista actuara como un mero contador ya que el comando se ejecuta para cada elemento de la lista.
El principal inconveniente de esto es que solo permite ejecutar un comando por cada archivo por ello ,para poder ejecutar más el comando a poner en do suele ser una llamada a otro bat:
FOR %%A IN (*.*) DO CALL OTROBAT
Ejemplo: Un bat que nos liste y nos muestre el contenido de todos los archivos .txt de un directorio:
El contenido del primer bat seria
(Como podemos ver al realizar la llamada pasamos la variable como parametro, que al otro archivo le llegara como si hubieramos puesto otrobat.bat parametro )
El contenido de otrobat.bat
Y el resultado de la ejecución:
Y hasta aquí llega esta guía básica de archivos batch , en otro post ya veremos un uso más avanzado de esto como puede ser usar esto para realizar modificaciones en el registro,en cuentas de usuarios, o liarla de formas varias en entornos de postexplotación y un largo etcetera
Bye!!
Deja un comentario