educatica!

educación, informática y demás

Clases de informática, Scripts Windows

Procesos por lotes: Scripts en Windows

Variable de entorno PATH

Se pone entre comillas porque tiene espacios.

Lista de directorios ordenada en la que la shell va a buscar los comandos o aplicaciones que el usuario pretenda ejecutar si no están en el directorio actual o no son un comando interno del isstema, que están en memoria principal.

Es decir, cuando nosotros ejectamos un programa o comando, por ejemplo firefox

La shell lo busca primero en memoria principal, si no está, lo busca en el directorio actual, si no está entonces lo busca en orden en cada uno de los directorios que están almacneados en la lista de directorios de la variable de entorno PATH.

Si queremos que la shell busque dentro de un directorio concreto ejecutables podemos añadir la ruta de este directorio directamente a la lista de directorios que se almacena en la variable PATH.

Para ello podemos utilizar el comando set que sirve para consultar, crear o modificar el valor de una variable de entorno. Como no sabemos la sintaxis, consultamos la ayuda.

En matemáticas alguna vez habremos hecho alguna operación como la siguiente

  • X= 10
  • X = X +10

En esa asignación lo que hacemos es que al valor que tenga X le sumamos 10 y ese nuevo valor es el que almacenará la variable X. Despu´és de realizar esas dos asignaciones, el valor de X será 20.

¿Cómo podemos hacerlo con la variable de entorno?, pues con el comando set.

Si ejecutamos el sieguiente comando, sobrescribimos el valor de la variable PATH.

Nosotros queremos añadir al valor actual un nuevo valor, así que deberíamos escribir lo siguiente:

Vamos a probar si esto funciona o no…

Problema… este cambio que hemos hecho en la variable de entorno PATH es un cambio local de la terminal o shell en la que estamos. Si abrimos otra shell, el cambio no aparece y cuando cerremos esta shell el cambio se pierde.

¿y cómo podemos hacer un cambio permanente? Tenemos dos opciones utilizando el comando setx o desde las herramientas en interfaz gráfica en Propiedades del sistema.

¿Qué es un script?

Vamos a añadir los siguientes comandos al fichero holaMundo.bat

Lo único que hemos hecho es escribir una serie de comandos en un fichero de texto plano con extensión BAT.

Pues precisamente eso es un script o proceso por lotes. Un script de Windows es un conjunto de comandos ordenados que se ejecutarán en orden, uno detrás de otro, por la shell.

Esto nos permite poder ejecutar una serie de comandos sin tener que esperar a que se vayan ejecutando uno a uno.

Gracias a los scripts podemos automatizar tareas de administración y reutilizarlas en distintos sistemas. Además, existen comandos que simulan sentencias de lenguajes de programación de alto nivel, como sentencias condicionales (hacer esto solo si se cumple una condición…) o iterativas (repetir una serie de comandos mientras se cumpla una condición…).

Vamos a empezar por lo más simple, la secuencia. En un script podemos escribir una serie de comandos que se ejecutarán en secuencia, en el mismo orden en el que se han escrito.

Por ejemplo, en nuestro fichero el primer comando que se ejecuta es echo. este comando, con un punto, mostrará una línea en blanco.

La siguiente línea muestra un mensaje de texto «Hola Mundo!!» y así sucesivamente.

¿Cómo se ejecuta un script?

Un script se ejecuta igual que un comando o aplicación. Lo único que hay que hacer es escribir la ruta del fichero que contiene el script. En nuestro caso, como está en el directorio actual, tan solo tendremos que escribir holaMundo u holaMundo.bat.

Hace lo que esperabamos, pero la salida no queda muy bien, porque está mostrando los comandos que está ejecutando.. Lo ideal sería que no se mostraran los comandos que se ejecutan para no dar información innecesaria que pueda descolocar al usuario.

Para ello podemos utilizar el comando echo off. Este comando, echo con la opción off, desactiva el echo de los comandos. El resultado será que no se mostrarán los comandos ejecutados, tan solo su salida.

Ejecutemos la nueva versión.

Está mucho mejor, pero todavía se muestra el comando echo off, puesto que cuando se ha ejecutado no estaba desactivado el echo. La solución es utilizar la @ delante del comando echo off.

Pero, ¿por qué funciona esto?. Con la @ precediendo a un comando indicamos a la shell que desactive el echo para ese comando. Si ponemos una @ delante de echo off, desactivamos el echo para el comando echo off, el cual desactiva el echo para el resto de comandos del script.

¿por qué no hay que activar de nuevo el echo al terminar el script? Porque esa desactivación solo se manteiene para el script, una vez termina su ejecución se vuelve al estado en el que estaba el echo al ejecutar el script.

Vamos a ejecutarlo

Ahora ya no se muestran los comandos que se están ejecutando.

Comentarios dentro de un script

Un comentario es una línea, o varias, de texto que contienen información sobre el script o algún conjunto de comandos que se ejecutan dentro del script. La shell no hace nada con los comentarios, pasa de ellos. Es información reservada al administrador o usuario que pueda ver el contenido del script.

Para poner un comentario podemos utilizar el comando REM o ::

Ejemplo

Crea un script llamado mkprofile.bat que se encargue de crear dentro del perfil del usuario actual los siguientes directorios: asir dam smr daw ceti.

Además, dentro de cada directorio creará los directorios: docs, pract y exam.

Para crear los directorios usamos el comando MKDIR. La ruta del perfil del usuario actual la tenemos en la variable de entorno USERPROFILE.

Ahora metemos los comandos en el orden en el que queramos que se ejecuten.

La línea 7 no haría falta, puesto que se crearán los directorios base en con los siguientes comandos.

Podemos borrarla o si queremos conservarla por si acaso, podemos ponerla como un comentario. Al ponerla como un comentario no se ejecutará por la shell

Perfilando el script…

El problema de este script es que es dificil de mantener y puede llevarnos a cometer errores humanos fácilmente.

Por ejemplo, con tanto «Copy Paste» podemos olvidar cambiar algún valor en alguna de las rutas. En cuanto a facilidad de mantenimiento, supongamos que nos piden, ahora, que los directorios estén dentro de un directorio llamado ciclos: tenemos que cambiar TODAS LAS RUTAS, es decir 15 rutas!

La solución, utilizar variables de entorno dentro del script. Que es una variable de entorno, es un valor que tiene un nombre que lo identifica. Este valor puede ser una ruta, por ejemplo:

Es más largo, pero es más fácil de mantener. Por ejemplo, supongamos que nos piden que creemos todos los directorios dentro del directorio 2021\ciclos\informatica dentro del perfil del usuario actual. Con este script bastaría con cambiar el valor que se asigna a la variable baseDir.

Tan solo tenemos que cambiar esa línea, el resto del script queda igual.

¿Cuando usamos variables?

Usamos variables cuando tengamos que repetir dentro de nuestro script en varias ocasiones valores literales (valores que no cambian y escribimos nosotros, como la ruta de un directorio, fichero, nombre de usuario, etc).

Al usar variables en nuestros scripts por un lado mejoramos la legibilidad del código y por otro facilitamos el mantenimiento del script, además evitamos o limitamos los errores humanos.

El nombre de una variable tiene que ser significativo, es decir tiene que informanos del tipo de dato que almacena.

Por ejemplo, supongamos que queremos crear todo el árbol de directorios dentro del directorio C:\Educatica\2021\ciclos. Tan solo tendremos que cambiar el valor de la variable que almacena el directorio base.

Supongamos que ahora queremos crear los directorios para el 2022, de nuevo tan solo tendremos que cambiar una variable.

Usando bucles (para mayores de 18+)

Podríamos aprovechar herramientas de programación como los bucles, pero ahora mismo no es momento de estudiar estos detalles. Se deja el código a continuación tan solo como una curiosidad o para quién tenga inquietudes al respecto.

Ejemplo

Vamos a crear un script llamado mkuser.bat que se encargará de crear todos los directorios y ficheros iniciales para un nuevo usuario en el sistema.

Resulta que en nuestro sistema, contamos con un directorio llamado educatica que está en la raíz de la unidad C: dónde se guarda información de los usuarios de nuestra organización. Dentro de este directorio tienen que existir los directorios publico, privado, usuarios.

Dentro del directorio usuarios, vamos a crear los directorios alfredoff, marinapg y ramonam

Además, nos gustaría contar con un fichero llamado leeme.txt dentro de cada uno de los directorios del directorio usuario dónde tengas un mensaje de bienvenida al sistema con el nombre del usuario.

Por último, deberás añadir al fichero info.log que estará dentro del directorio educatica el nombre del usuario actual, la fecha y hora actuales.

Recuerda… un script es un conjunto ordenado de comandos que se ejecturán en secuencia. Por tanto, si sabes realizar todas estas operaciones con comandos, sabes crear un script que lo automatice.

Solución

Vamos a mostrar los ficheros también en el árbol de directorios

Vamos a perfilar un poco el script.. mayores de 18++

Lo ideal es usar un bucle para los usuarios…

Ejemplo – Creando ficheros para prácticas

Vamos a crear un script llamado mkfiles.bat que creará una serie de ficheros para poder realizar prácticas de sistemas con comandos en Windows. Para ello vamos a generar ficheros HTML, TXT, DOC, PDF y ODS.

En realidad no serán ficheros de ese tipo, sino que serán ficheros de texto plano a los que le vamos a poner una extensión diferente con fines didácticos.

Todos los ficheros contendrán el siguiente mensaje: «Fichero de prácticas de tipo – » seguido del tipo de fichero que sea.

Para facilitarnos el trabajo vamos a crear un directorio llamado TMP dentro del directorio actual, que será el directorio donde trabajemos.

Dentro de este directorio vamos a crear cinco ficheros base cuyo nombre será base con cada una de las extensiones con las que vamos a trabajar. Por ejemplo: base.html, base.txt, base.doc, base.pdf y base.ods.

Cada fichero, como hemos dicho, contendrá el mensaje oportuno.

Una vez creados los cinco ficheros ahora vamos a generar todos los ficheros que necesitamos para nuestras prácticas. Estos ficheros los vamos a almacenar dentro de un directorio llamado files que estará dentro del directorio TMP. Como no existe, tendremos que crearlo.

En el directorio de ficheros crearemos, copiando los ficheros base de cada tipo, los siguientes ficheros:

  • ssoo-Linux.pdf
  • ssoo-Windows.pdf
  • ssoo-MacOs.pdf
  • ral-Linux.pdf
  • ral-Windows.pdf
  • ral-MacOs.pdf
  • ssoo-1Ev.ods
  • ssoo-2Ev.ods
  • ssoo-3Ev.ods
  • ral-1Ev.ods
  • ral-2Ev.ods
  • ral-3Ev.ods
  • ral-septiembre.txt
  • scripts.txt
  • vacaciones-diciembre.html
  • examen01.html
  • lm-javascript.html
  • lm-css3.doc
  • ssoo-sistemas.doc

Directorio de Scripts

¿Y si queremos ejecutar este script en varios perfiles de usuario? Si queremos poder ejecutar los scripts que creemos desde cualquier directorio y usuario, por ejemplo porque los queremos dejar a disposición de los usuarios de nuestro sistema, podemos crear un directorio que almacene los scripts del sistema y añadir la ruta de dicho directorio al PATH.

De esta forma, nuestros scripts estarán siempre disponibles para ser ejecutados sin importar el directorio actual en el que nos encontremos.

Deja un comentario

Tema creado por Anders Norén