educatica!

educación, informática y demás

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

Scripts de Windows: variables y parámetros

En un script podemos utilizar valores literales. Los literales son valores que no cambian, en principio, como por ejemplo la ruta de un fichero.

Si nos fijamos, estamos haciendo una redirección sobre un fichero concreto una y otra vez. Cada vez que hacemos una redirección en este ejemplo tenemos que copiar la ruta del fichero, que no va a cambiar en todo el script. Podemos utilizar CTRL+C y CTRL+V – copiar y pegar – para evitar fallos humanos.

Script donde se repite una y otra vez la misma ruta de un fichero destino.

Bien, si a lo largo del ciclo de vida del script, es decir del tiempo en que se utilice, nos piden que modifiquemos la ruta del fichero de log en el que se guarda la información, la modificación tendríamos que hacerla en multiples puntos dentro del script.

Esto nos llevará no solo a un coste en tiempo alto sino también a la posibilidad de cometer algún error humano por descuido.

Si declaramos una variable que almacene la ruta del fichero de log y la utilizamos en las redirecciones el script será mucho más facil de matener y las posibles modificaciones serán mucho más sencillas de llevar a cabo.

El nombre de la variable tendría que ser significativa con respecto al dato que almacena. En este caso almacenará la ruta de un fichero de log, así que la llamaremos logFile.

Supongamos que nos solicitan cambiar la ruta en la que se almacenan los ficheros de log de cada usuario. Ya no se van a guardar en el directorio C:\Logs, sino que se almacenarán en el directorio C:\Informes\Usuarios, con el nombre del usuario actual y extensión log.

Usanto CTRL+C – CTRL+V para modificar la ruta del fichero de log. Podemos cometer errores humanos sin querer.

Podríamos haber utilziado las herramientas de reemplazar de nuestro editor de texto. No obstante, habrá ocasiones en las que esto pueda provocar errores «silenciosos». De hecho, el error humano que hemos cometido posiblemente sea un error que no de la cara, que no sea detectable hasta que busquemos esa información concreta.

En esta caso la mejor opción hubiera sido crear y utilziar una variable que almacene la ruta del fichero de log.

El script ha ganado en legibilidad y en facilidad de mantenimiento utilizando tan solo una nueva variable.

Copia de seguridad de un usuario concreto

Nos gustaría contar con un script que hiciera una copia de seguridad del usuario marinapg. Si todo va bien, este script lo utilizaremos para hacer copias de seguridad de otros usuarios del sistema. Lo vamos a llamar userBackup.bat.

La copia de seguridad la realizaremos en el directorio C:\Backup\marinapg, es decir un directorio con el nombre del usuario dentro del directorio C:\Backup.

Una vez hecha la copia de seguridad, añadiremos información de log de la copia realizada a un fichero que tendrá como nombre el nombre del usuario, en este caso marinapg, con extensión log dentro del directorio C:\Backup (C:\Backup\marinapg.log)

En ese fichero de log almacenaremos la fecha y hora de la copia de seguridad y el árbol de directorios del perfil del usuario marinapg mostrando sus ficheros.

Este script, salvo que lo ejecute el usuario marinapg, deberíamos ejecutarlo en una terminal con permisos de administrador para poder acceder a los ficheros del perfil de otro usuario distinto.

Este script funciona, pero es muy limitado, porque solo crea la copia de seguridad del usuario marinapg. ¿y si queremos que cree la copia de seguridad del perfil del usuario alfredoff?.

Un pequeño detalle que suele ocurrir cuando mantenemos, modificamos, con cierta prisa un script o programa. Los comentarios, también deberíamos actualizarlos. en este caso, hemos cambiado marinapg por alfredoff solo en los comandos, sin embargo los comentarios nos siguen diciendo que la copia se realizará sobre los datos del usuario marinapg.

Este fallo no es grave, pero es un ejemplo de una situación que deberíamos evitar: Los comentarios nos indican una cosa distinta de la que hace en realidad el script.

Desde luego, cambiar el nombre del usuario no es lo más acertado. Aquí nos damos cuenta de que lo ideal sería haber utilizado una variable para guardar el nombre del usuario del que vamos a realizar la copia de seguridad.

Nos encontramos con un valor literal, el nombre del usuario, que repetimos en muchas partes del script.

Ahora, tan solo cambiando el valor de la variable podemos conseguir que se realice la copia de seguridad del usuario que queramos.

También podríamos haber definido y utilizado otras variables para facilitar el uso de rutas a lo largo del script.

¿Es necesario utilizar tantas variables?. En este caso, no es necesario, con la de usuario nos habría servido porque es un script muy simple. No obstante si el número de comandos fuera mayor, entonces si es recomendable utilizar variables incluso para ese tipo de rutas que se reutilziarán en muchas partes del script.

Por ejemplo, gracias a estas variables si nos pidieran que guardarmos las copias de seguridad en otro directorio distinto, tan solo tendríamos que modificar la variable que almacena la ruta del directorio de copias de seguridad.

Parámetros: Pasar y leer parámetros en un script

Hemos utilizado multitud de comandos a los que les hemos pasado valores por parámetro para especializar o adecuar su función a nuestras necesidades.

Por ejemplo, el comando dir lo hemos utilizado para mostar distitnso directorios. Lo único que hemos hecho para mostrar diferentes directorios es pasarle por parámetro la ruta del directorio que queriamos mostrar. El comando es el mismo, pero si le pasamos un parámetro u otro hará cosas distintas.

Con los scripts podemos hacer lo mismo. Se le pueden pasar valores por parámetro a un script y el script los puede utilizar dentro de su código o comandos para realizar una función más especializada.

¿Cómo se pasan parámetros a un script?. Igual que se pasan parámetros a cualquier comando o aplicación. Es decir, escribiendo el nombre del script y, a continuación, los parámetros que queramos pasarle separados por espacios.

¿Cómo se usan?. El interprete de comandos, cuando ejecuta el script, crea una serie de variables especiales que contienen los valores de los parámetros. Estas variables son de solo lectura, no se puede escribir en ellas dentro del script, y son inicializadas por el interprete de comandos.

Estas variables espciales son %0,%1, %2, … , %9. Donde cada una de ellas representa el parámetro con el número especificado.

Vamos a crear un script que nos muestre los parámetros que se han pasado al script, cuyo nombre será muestraParametros.bat.

Modificando el script userBackup

Vamos a modificar el script userBackup para que reciba el nombre del usuario del que queremos hacer la copia de seguridad en el primer parámetro del script.

Tan solo hemos tenido que cambiar la línea 8, cambiando el nombre del usuario literal por el valor pasado en el parámetro 1. Es bueno utilizar variables con nombres significativos en lugar de parámetros sobre todo en scripts largos para mejorar mucho la legibilidad del script.

Deja un comentario

Tema creado por Anders Norén