educatica!

educación, informática y demás

Clases de informática, Comandos, Informática, Scripts Windows, Sistemas operativos, Windows

Jugando con scripts

Bash educatica

Bash Educatica

Nuestro primer script

Vamos a crear un pequeño script llamado helloWorld.bat que mostrará un saludo al usuario actual.

Una vez escrito el código tan solo tenemos que guardar el fichero como helloWorld.bat en nuestro directorio personal.

Para ejecutarlo, desde una terminal, escribimos la ruta del fichero. No es necesario poner la extensión.

Un poco más de información

Vamos a modificar nuestro primer script para que ahora muestre, además, la fecha y hora actual en una línea. Debajo, mostrará el nombre de la máquina, después la ruta del directorio donde está instalado Windows y por último la ruta del perfil del usuario actual.

Vamos a tener que utilizar variables de entorno. Si no conocemos o no recordamos alguna de las variables de entorno que tenemos que usar podemos consultar la lista de variables de entorno con el comando set o la ayuda de set para consultar las variables dinámicas.

Nos quedaría un script así:

Este script no tiene mucha utilidad desde el punto de vista administrativo. No obstante, nos sirve para dar los primeros pasos en el mundo de los scripts.

Script infoLog.bat

Vamos a crear un pequeño script que almacenará cierta información de log del usuario actual en un directorio, en concreto en el directorio C:\Logs. El script se llamará infoLog.bat y lo guardaremos en el directorio personal del usuario con el que estamos trabajando.

Cuando se ejecute el script, queremos guardar en un fichero con el nombre del usuario actual almacenado en C:\Logs y con extensión .log información sobre el usuario. Si el fichero existe, se añadirá la información al final del mismo.

Esta información será el nombre del usuario, seguida por la ruta del perfil del usuario, fecha y hora actual.

Debajo, se almacenará el árbol del perfil del usuario mostrando los ficheros que contiene.

Por último se almacenará el listado de ficheros que tiene el perfil del usuario y todos sus subdirectorios.

Suponemos que el directorio C:\Logs existe en el sistema (ahora lo creamos con comandos).

Pistas

Como podemos adivinar a simple vista vamos a tener que utilizar redirecciones para almacenar la información en el fichero de log del usuario. Tenemos que pensar que comandos ejecutaríamos para mostrar la información a guardar en pantalla y después aplicar la redirección concreta.

¿Cuál será el fichero de log? El fichero de log, como indica el enunciado, tendrá el mismo nombre que el usuario actual con extensión .log y se guardará en el directorio C:\Logs. Así que tenemos que hacer redirecciones sobre ese fichero concreto.

¿Cuál es el usuario actual? Existe una variable de entorno que nos puede ayudar con eso.

Solución

Lo primero que vamos a hacer es crear el directorio de logs, que damos por supuesto que ya existía.

Abrimos notepad++ o el editor de texto que queramos y, como consejo, guardamos el fichero que contendrá el script con el nombre indicado.

De esta forma, se activará automáticamente el resaltado de sintaxis que nos facilitará la edición de texto y el desarrollo del script.

La primera línea de un script de Windows será siempre la desactivación del echo.

Continuamos con los comentarios donde nos dan información sobre la función del script, el autor, forma de contacto y fecha de creación (y modificaciones posteriores).

Ahora desarrollamos el cuerpo del script

Para ejecutarlo, desde consola de comandos, tan solo tenemos que escribir la ruta del fichero que contiene el script.

En nuestro caso utilizamos una ruta relativa, puesto que está en el directorio actual.

El fichero está creado. Podemos comprobar si contiene la información que nos solicitaban.

Variable de entorno PATH

La variable de entorno PATH es una variable que almacena una lista ordenada de rutas de directorios en los que el interprete de comandos buscará comandos, aplicaciones o scripts – ficheros ejecutables – cuando el usuario escriba un comando en la terminal.

Vamos a mostrar el contenido de la variable PATH en pantalla.

Si nos fijamos, es una lista en la que cada elemento está separado del siguiente por un punto y coma. Esta lista indica que el interprete de comandos buscará los ejecutables del comando a ejecutar primero en memoria y después en los directorios de la variable PATH, por último buscará el ejecutable en el directorio actual.

Según lo que tenemos en nuestra variable el interprete de comandos buscará primero en C:\Windows\system32, si no está el ejecutable, lo buscará en C:\Windows y así hasta que encuentre un ejecutable cuyo nombre coincida con el nombre del ejecutable que hemos escrito.

Por ejemplo, acabamos de crear un par de scripts. Los hemos ejecutado escribiendo su nombre. Todo ha funcionado porque están almacenados en nuestro directorio actual.

Vamos a cambiar de directorio y trataremos de ejecutarlos escribiendo solo su nombre.

Si escribimos toda la ruta, ya sea relativa o absoluta, debería funcionar.

La solución más simple, meter n el path un directorio donde tengamos nuestros scripts.

De esta forma primero creamos un directorio donde guardaremos todos los scripts, por ejemplo C:\Scripts.

Ahora añadimos la ruta de este directorio a la variable PATH de forma permanente o bien desde propiedades del sistema o bien utilizando el comando setx.

Podemos hacerlo con el comando set, pero el resultado será temporal.

Con el comando setx podemos establecer la variable de forma permanente pero necesitamos una terminal como administrador.

Ahora desde la terminal de administrador utilizando setx podemos establecer el valor de la variable PATH

Este cambio será efectivo cuando abramos una nueva terminal, sin embargo el cambio es directo en el sistema operativo. Podemos verlo en propiedades del sistema

Podemos mirar el contenido de la variable PATH.

Abrimos una nueva terminal y desde esta nueva terminal, con la variable PATH actualizada, vamos a mover los ficheros de script en este directorio.

Con esto, podremos ejecutar cualquiera de los scripts almacenados en este directorio desde cualquier directorio del sistema tan solo escribiendo el nombre del fichero BAT.

Ampliando infoLog.bat

Vamos a guardar información extra sobre el usuario actual. Queremos seleccionar y organizar un poco la información de ficheros que se almacena, seleccionando solo ficheros de imagenes, documentos y vídeos.

Este script funciona correctamente, pero supongamos que, ahora, nos piden que almacenemos el fichero de logs en lugar de en C:\Logs en el directorio C:\Logs\Users. Este cambio nos hará que tengamos que cambiar todas las redirecciones.

Esto es un ejemplo de lo que nos puede suceder en un script en el que repitamos mucho un dato, en este caso la ruta de un fichero.

La forma más sencilla de mantener este tipo de datos es utilizar una variable que contenga el dato. De esta forma, tan solo tendríamos que cambiar el valor de la variable.

Vamos a crear la variable que almacenará la ruta del fichero destino de la información de log. El nombre de la variable debería ser significativo, por ejemplo logFile.

Ahora utilizamos la variable en las redirecciones.

Si nos fijamos en el código, ahora queda mucho más facil de entender. Todas las redirecciones son sobre el fichero almacenado en la variable logFile. Si queremos cambiar la ruta, tan solo tenemos que cambiar el valor de la variable.

Por supuesto, el directorio C:\Logs\Users debería existir previamente a la ejecución de este scripts. Si no es el caso, tendremos que crearla manualmente.

Vamos a modificar el script para que ahora guarde el fichero de log en un fichero llamado usuario.log dentro de un directorio que se llamará como el usuario actual dentro de un directorio llamado Usuarios dentro del directorio C:\Logs.

Gracias a las variables podemos solucionar este problema de forma muy sencilla y facilitar posteriores modificaciones a nuestro script.

Deja un comentario

Tema creado por Anders Norén