Introducción al problema

No sé si os ha pasado que al intentar copiar un fichero a un servidor de ficheros, éste está abierto por "algo" y no lo puedes sobreescribir. Quizás la solución es esperar a que el proceso que lo está usando lo cierre o ir "manualmente" a Computer management->Open files y hacer un "Close file".

Este proceso es tedioso si has de cerrar muchos archivos de un directorio o si sencillamente lo has de automatizar. Por eso el script que os propongo... que es parametrizable y programable en su ejecución desde el Administrador de tareas.

Nota: Haciendo esto, cierras la conexión entre el equipo que lo tiene abierto y el servidor, por lo que puedes provocar la pérdida de datos. Las pruebas realizadas cerrando archivos abiertos de Office han resultado existosas ya que no se pierden datos.

Cosas a tener en cuenta

El problema de usar "net file" es que no puedes especificar el nombre del archivo a cerrar ni la carpeta donde se encuentra, ya que se trabaja con "ID" que identifican el fichero abierto. Pero todo tiene solución en esta vida, menos la muerte, así que usaremos el proveedor WinNT para localizar el nombre del fichero y luego buscar el ID asociado al mismo.

La ejecución de este script sólo está probada y validada en modo "local".

Solución propuesta

La solución propuesta se basa el la ejecución del comando "net file" con el parámetro /close, por lo que sólo es aplicable a máquinas NT.

Primero de todo hemos de consultar al sistema para saber qué archivos tiene abiertos. Esto lo hacemos con la primera instrucción del script.

Dentro del "FOR" preguntamos si de todos y cada uno de los ficheros abiertos, alguno de ellos tiene el texto a buscar especificado, como por ejemplo Saldos o si la carpeta que los contiene se llama Saldos.

En el caso de que se encuentre mediante el uso de InStr, guardamos ese valor en la variable "valido". En el "IF" miramos si la condición se cumple. Si lo hace, mediante Resource.Name obtenemos el ID del archivo que pasaremos a "net file" que cerrará el archivo en cuestión.

Y así, por cada uno de los archivos que coincida el texto que estamos buscando. Pero cuidado que si también coincide alguna parte del texto sin ser el que buscamos, lo cerrará. Esto pasaría si buscamos la palabra "culo" y se encuentra con "artículo"... Para evitarlo, intentar pasarle como parámetro el texto lo más completo posible.

Marc
MCP - MVP Windows - Shell / User

Nota: GetTheName realmente no sirve para nada en este script así que se podría eliminar.