SlideShare una empresa de Scribd logo
1 de 24
Descargar para leer sin conexión
Tutorial de vbscript   by   Novlucker


Temas

       • Introducción - pdf 1,2
       • Operadores
       • Esctructuras de control
              • If
              • Case
              • For
              • While
              • Do
       • Manejo de objetos
              • Filesystemobject(FSO) - pdf 1, 2
              • wshShell
              • wshNetwork - pdf 1, 2
              • Dictionary - pdf 1, 2
              • Commondialog - pdf 1, 2
Se irán añadiendo nuevos objectos para descarga en pdf


Bueno, primero aclarar que este tutorial, pretende explicar de manera básica las distintas
instrucciones aplicadas en visual basic script (vbs de aquí en más), para que así de este modo, todos
aquellos interesados en este lenguaje de scripting, tengan la posibilidad de comenzar a desarrollar
sus pequeños scripts.

Introducción:

Para empezar, debemos decir, que los vbs, tal y como lo dice su nombre, son "simples" scripts, que
se ejecutan por medio de un intérprete en el sistema, con lo que bastará con crear el código en un
simple bloc de notas (o similar), y guardarlo con extensión *.vbs, sin necesidad de realizar ninguna
compilación (aunque existe la posibilidad).

En este caso el intérprete es, el Windows Script Host de Microsoft, por lo que estará presente
(aunque en distintas versiones) de manera predeterminada desde Win 98 en adelante, así que
podremos hacer uso de estos archivos en prácticamente, todos los Windows.

Se puede decir que los vbs son una mejora con respecto a los bat, ya que estos permiten una mayor
interacción con el sistema operativo, y decir además que este lenguaje, es un derivado de Visual
Basic, por lo que desde un principio y aunque de manera mucho más limitada, se podrá familiarizar
con dicho leguaje (la sintaxis es similar en todos los aspectos).

A tener en cuenta antes de comenzar:

• En vbs no importan las mayúsculas o minúsculas
VBscript = vbscript
• Para indicar un final de línea, no se debe de hacer más que pasar a la siguiente (no es necesario
terminar con por ejemplo " ; " como en javascript)
• Los comentarios, van precedidos de una " ‘ " (comilla simple)
  ‘ Esto es un comentario
• No es obligatorio declarar las variables, aunque es conveniente hacerlo para dejar más legible el
código
  Se pueden declarar utilizando Dim, o bien, se les da valor directamente.
  Dim nuestravariable
  También puede ser utilizado Option explicit para así "obligarse" a declarar las variables (en los
pequeños ejemplos lo haré así)

En la mayoría de los ejemplos utilizaré la función msgbox, la cual se encarga de mostrar un
mensaje en pantalla.

Tipos de dato:

Existen varios tipos de datos que pueden manejarse en vbs, y los que más vamos a utilizar, son ;
Booleano, Byte, Fecha, Double, Entero, Entero largo, Objeto, Single, Cadena.
Todos estos representan valores verdadero/falso, fecha/hora, númerosentero positivo/negativo,
cadena de texto (no creo necesite más explicación que esta).

Operadores:

Tendremos varios tipos de operadores a nuestra disposición.

1. Aritméticos: Suma(+), Resta(-), Multiplicación(*), División decimal(/), División entero(),
Potencia(^), Resto división(mod)
2. Comparación: Igual(=), Distinto(<>), Mayor(>), Menor(<), Menos o igual(<=), Mayor o
igual(>=)
3. Lógicos: Y(and), O(or), Xor, No(not)
4. De cadena: Concatenación(&)

Estos han sido a grandes rasgos, los operadores a utilizar en vbs, por lo que después, y haciendo uso
de nuestro próximo tema (estructuras de control), se mostrarán algunos ejemplos.

Estructuras de control:

1. IF (condicional)
Esta se utiliza para evaluar 2 o más posibles resultados, en virtud del cual, se tomarán diferentes
acciones.

Citar
Dim valor
Valor = 8
If valor < 10 then
  Msgbox "El valor es MENOR a diez "
Else
  Msgbox "El valor es MAYOR a diez "
End if

Como se ve en este ejemplo se comienza declarando la variable "valor", luego de esto, se le asigna
el valor 8, y posterior a esto, se evalúa dicho valor (haciendo uso de los operadores de comparación
vistos anteriormente), por lo que si el valor es menor a 10, se mostrará un mensaje en pantalla
indicando que es MENOR, de lo contrario, el mensaje indicará MAYOR (en este caso le habíamos
asignado el valor 8, por lo que será menor).
2. Case (condicional)
En el caso del IF, si bien no se ha mostrado, existe la posibilidad de anidar dos o más, para así
realizar varias evaluaciones, pero el caso es que cuando se realizan muchas, el código puede
volverse algo engorroso. Es en estos casos, donde recurrimos al select case.
Citar
Dim numero
numero = 8
Select case numero
  case 6
    msgbox "El valor es seis "
  case 7
    msgbox "El valor es siete "
  case 8
    msgbox "El valor es ocho "
End select

Al igual que en el anterior, en este ejemplo, se comienza definiendo la variable "numero", y se le
asigna 8 como valor. Luego con select case se indica que es lo que se va a revisar, en este caso,
cuanto es el valor de "numero", luego, se indican las opciones con un case por cada una de ellas, en
este caso, "case 6", en el caso de que el valor sea 6, "case 7", y "case 8", para el caso de que el valor
sea 7 y 8 respectivamente (como sabemos es 8), es decir, "si es 6", mensaje "El valor es seis", "si es
7", mensaje "El valor es siete", y "si es 8", mensaje "El valor es ocho".

3. FOR (bucle)
El for es utilizado cuando queremos repetir una determinada acción un cierto número de veces.
Citar
Dim i
For i=1 to 5 step 1
 Msgbox "El valor de i es: " & i
Next

Comenzamos definiendo la variable "i", luego de esto, inicializamos el bucle for, es decir, decimos
que; desde "i" igual 1, a "i" igual 5, incrementando de a
1, mostraremos un mensaje con la frase "El valor de i es: " y luego de esto, el valor real de "i", por
lo que en cada "paso" que de nuestro bucle, mostrará algo más o menos así…




Como ven, 5 mensajes "casi" iguales, ya que la secuencia se repite 5 veces, y lo único que cambia
es el valor de "i" (la hemos concatenado al mensaje con el carácter &), ya que va tomando distintos
valores en cada uno de los "pasos".

4. FOR EACH(bucle)
El for each, tiene la particularidad de que es un for que recorre todos los elementos de una colección
o vector. Antes de continuar, intentaré explicar lo que es un "array", ya que será lo que utilicemos en
el ejemplo.
Un array o matriz, es una estructura de datos en forma de variable, que permite almacenar más de
un único valor, dentro de una única variable. Para acceder a cada uno de estos valores, será
necesario hacer uso de índices.
Citar
Dim nombres(2)
nombres(0)= "Martín"
nombres(1)= "Pablo "
nombres(2)= "Carlos "
Msgbox nombres(1)

En este ejemplo, se define la variable "nombres" que tendrá espacio para 3 valores (tener en cuenta
que comienza por 0, por eso que se ponga 2), y luego, se definen cada uno de los valores de
"nombres". Por último utilizamos un mensaje, para mostrar el valor del índice 1 del array, con el
siguiente resultado…




Como se ve, el mensaje muestra el nombre "Pablo" porque al llamar al array, hemos puesto el índice
1, y como se ve cuando lo declaramos, le habíamos asignado valor "Pablo", en el caso de indicar 2
en lugar del 1, el mensaje mostraría "Carlos".
Espero esto haya quedado lo suficientemente claro.
Ahora, volviendo al For each (espero ya no te hayas olvidado), este podría ser utilizado en el caso
del array (hay otros casos).
Citar
Dim nombres
Dim n
nombres = array("Martín","Pablo","Carlos")
For each n in nombres
  Msgbox n
next

A pesar de que no lo parezca, es muy similar al anterior, y algunos estarán diciendo, "que tenía que
ver el array con esto", pero si se fijan, solamente he mostrado, una segunda manera de declarar el
array.
En este caso, en lugar de ir metiendo cada uno de los valores con sus respectivos índices, declaro el
array en una sola línea y va quedando organizado según el orden en el que meta los valores, por eso,
"Martín" quedará en el lugar 0, "Pablo" en el lugar 1, y "Carlos", en el lugar 2, al igual que en el
caso anterior. Esto con respecto al array, ahora a lo que íbamos, el for each.
En líneas siguientes comenzamos con el for, y decimos, por cada "n" (la letra, en este caso "n" la
elegimos nosotros) en "nombres" (es un array que contiene tres

nombres), mensaje con el "n", o lo que es igual, por cada nombre, en el "contenedor" "nombres",
mensaje con el nombre, y el resultado es el siguiente…




Tanto en for simple, como en el for each, podemos hacer uso de exit for, para parar la ejecución
del for completa. Para decirlo de otra manera, con esto escapamos al for.
WHILE (bucle)
El bucle while, es utilizado cuando queremos que una determinada acción se repita mientras una
determinada condición de cumpla.
Citar
Dim numero
Numero = 1
While numero <= 10
 Msgbox numero
 numero = numero + 1
Wend

Comenzamos el ejemplo declarando la variable numero, y le asignamos valor 10, luego
ejecutamos bucle, mientras el valor de "numero" sea menor o igual a 10,
mostramos mensaje con el valor de numero, y además le sumamos 1 al propio valor de numero (de
este modo lo utilizamos a modo de contador), luego de 10 veces de mostrar mensaje, el valor de
"numero" será igual a 11 y al verificarse la condición esta no se cumplirá, por lo que terminará.

5. DO (bucle)
El bucle do tiene varias opciones, pero básicamente hará algo, "mientras", o "hasta que" ocurra
algo.
Citar
Do
 Msgbox "Esto es un mensaje"
Loop

Este bucle, se repetirá al infinito, por lo que mostrará un mensaje, interminables veces.
Ahora bien, este do, puede ser modificado, para tener algo más de control sobre él, y es justamente
haciendo uso de esas condiciones que comentaba antes, "mientras", o "hasta que"
Citar
Dim a = 1
Do until a=10
 Msgbox "Esto es un mensaje"
Loop

Este código se resume en; mensaje de "Esto es un mensaje" hasta que "a" sea igual a 10.
En lugar de until podría utilizarse while, para cambiar la condición a mensaje de "Esto es un
mensaje" mientras "a" sea distinta de 10.
Citar
Dim a = 1
Do while a<>10
 Msgbox "Esto es un mensaje"
Loop

Y también puede utilizarse until y while, antes o después de ejecutarse el bucle
Citar
Do until/while condición (es distinta según sea until o while)
 Msgbox "Esto es un mensaje"
Loop until/while

Como se ve, este bucle nos permite darle varios usos según nos convenga, por lo que termina siendo
muy versátil y útil.
Al igual que para los for, en el caso de querer salir de un bucle do, también contamos con una
función de escape, en este caso, exit do
Así termina está pequeña introducción a las rutinas básicas de visual basic script, la idea es seguir
extendiendo este "tuto", como comentario agrego además, que este lenguaje posee muchisimas
funciones, las cuales no detallaré, ya que sería interminable, además de que me centraré más
adelante, en explicar funciones expecificas de objetos.

En el caso de querer más documentación al respecto, se pueden descargar la documentación sobre
windows script host, donde tendrán la referencia a todas las funciones de las que podemos hacer
uso. Windows Script 5.6 Documentation

                                         Manejo de objetos

Anteriormente, he intentado mostrar las diferentes estructuras de control que nos permiten
encaminar nuestros vbs, es por esto que ahora, pasaremos a los OBJETOS.

Toda interacción de vbs con el sistema se basa en el manejo de objectos (ActiveX), que no son más
que librerías especializadas y a nuestra diposición, por lo que dependiendo de lo que busquemos
hacer, haremos uso de una u otra (mezclandolas en nuestros scripts)
Nota: No haré uso de dim para declarar variables en los ejemplos, para así ahorrar espacio.

Los objetos básicos de los que se hace uso son dos:
1. FSO (FileSystemObject): manejo de unidades, archivos y carpetas.
2. WshShell: acceso a información de sistema, trabajo con el registro, manejo accesos directos,
ejecución de aplicaciones.

Antes de continuar debo de explicar que al trabajar con los objetos, los mismos se deben de declarar
de la siguiente manera:

Set variable = createobject(objecto)

Ejemplo:

Set objfso = createobject("scripting.filssystemobject")
Ahora sí, pasamos directamente al análisis del objeto FSO.

FSO (File System Object)

Las distintas funciones que se pueden realizar a través de este objeto son:
• Borrar, mover y copiar archivos
• Leer y escribir en archivos de texto (Crear)
• Obtener y modificar atributos de archivos y carpetas
• Crear, borrar, mover y copiar carpetas
• Obtener propiedades de archivos y carpetas
• Listar subcarpetas
• Listar discos y particiones
• Obtener propiedades de discos y particiones
• Obtener determinadas rutas de sistema

Mover archivos
Objfso.movefile origen, destino

Ejemplo:
Código

Set objfso = createobject("scripting.filesystemobject")
Objfso.movefile "C:archivo.txt", "D:Carpeta"



Borrar archivos

Objfso.deletefile archivo

Ejemplo:
Código
Set objfso = createobject("scripting.filesystemobject")
Objfso.deletefile "C:archivo.txt"



Copiar archivos

Objfso.copyfile origen, destino, sobreescribir

Ejemplo:
Código
Set objfso = createobject("scripting.filesystemobject")
Objfso.copyfile "C:archivo.txt", "D:destino.txt", true



Crear carpetas

Set variable = objfso.createfolder(destino carpeta)

Ejemplo:
Código
Set objfso = createobject("scripting.filesystemobject")
Set micarpeta = objfso.createfolder("C:carpeta")



Mover carpetas

Objfso.movefolder origen, destino

Ejemplo:
Código
Set objfso = createobject("scripting.filesystemobject")
Objfso.movefolder "C:Carpeta", "D:Destino"



Borrar carpetas

Objfso.deletefolder carpeta
Ejemplo:
Código
Objfso.deletefolder "C:Carpeta"



Copiar carpetas

Objfso.copyfolder origen, destino, sobreescribir

Ejemplo:
Código
Set objfso = createobject("scripting.filesystemobject")
Objfso.copyfolder "C:Carpeta", "D:Destino", true



Leer y escribir en archivos

Para el manejo de archivos de texto, debemos de tener en cuenta, la existencia o no del archivo, y el
modo en el que accedemos a él.
Obviamente, si un archivo no existe, no podrémos acceder a él, y a su vez, si abrimos un archivo en
modo de léctura, nunca podremos escribir dentro.

Crear archivos de texto y escribir en ellos

Set variable = objfso.createtextfile(ruta, sobreescribir)

Ejemplo:
Código
Set objfso = createobject("scripting.filesystemobject")
Set archivotexto = objfso.createtextfile("C:archivo.txt",true) 'creamos el
archivo
archivotexto.writeline "Este es el texto que estoy escribiendo" 'escribimos una
linea
archivotexto.writeblanklines(2)                         'escribimos 2 lineas en
blanco
archivotexto.writeline "Aqui mas texto"                         ' escribimos
otra linea de texto
archivotexto.close                                              'cerramos el
archivo



Notese que al comenzar, hemos creado el archivo y lo hemos asignado a una variable, luego hemos
utilizado el identificador de archivo (variable), para escribir dentro de él, en este caso, hemos
utilizado writeline, que escribe una línea, y agrega un retorno de carro para que si volvemos a
escribir, lo hagamos en una nueva línea, en cambio , si en su lugar, utilizamos write, el resultado,
será que no habrá salto de línea, por lo que todas las oraciones iran quedando una detrás de la otra.
Por último, hemos cerrado el archivo.

Abrir archivos de texto y escribir en ellos

Set variable = objfso.opentextfile(ruta, modo, creación)
Ejemplo:
Código
Set objfso = createobject("scripting.filesystemobject")
Set archivotexto = objfso.opentextfile("C:archivo.txt",8,true)
'abrimos el archivo
archivotexto.writeline "Este es el texto que estoy escribiendo"
'escribimos una linea
archivotexto.close
'cerramos el archivo



Como se puede ver, al abrir el archivo, hemos indicado la ruta, el modo 8 que se utiliza para
appending o escritura al final de archivo, y true, que quiere decir que en caso de que no exista el
archivo se cree, es decir que de este modo, no solo abrimos el archivo, sino que de no existir, dicho
archivo será creado en el proceso.

Para tener en cuenta, los modos en los que se puede abrir un archivo son:
1- Modo LECTURA
2- Modo ESCRITURA (escribe al principio)
8- Modo APPENDING (escribe al final)

Como se puede ver, al abrir el archivo, hemos indicado la ruta, el modo 8 que se utiliza para
appending o escritura al final de archivo, y true, que quiere decir que en caso de que no exista el
archivo se cree, es decir que de este modo, no solo abrimos el archivo, sino que de no existir, dicho
archivo será creado en el proceso.

Leer desde archivos de texto

Así como abrimos archivos y podemos escribir en ellos, también existe la posibilidad de leer desde
ellos, para lo cual utilizaremos readline, y readall.
Como se puede imaginar, con readline iremos leyendo una a una las líneas del archivo (cada vez
que pongamos readline leeremos solo una), con este, leemos una línea, y el puntero se situa al final
de la línea, para que a la próxima ejecución de esta función, sea la línea siguiente la que sea leída.
Con readall en cambio, leeremos el total de archivo.
Existe además una función llamada skipline, con la cual saltaremos la lectura de una línea.

Ejemplo:
Código
Set objfso = createobject("scripting.filesystemobject")
Set archivotexto = objfso.opentextfile("C:archivo.txt",1)                        'abrimos el
archivo
msgbox archivotexto.readline                                                      'leemos una
linea, la primera
archivotexto.skipline
'saltamos una linea
msgbox archivotexto.readline                                                      'leemos una
linea, la tercera
archivotexto.close
'cerramos el archivo



Atributos de archivos y carpetas

A continuación explicaré el método mediante el cual, se puede obtener, o bien cambiar, los atribuos
de archivos y carpetas (es prácticamente igual para ambas cosas)

Obtener atributos

Set variable = objfso.getfile(ruta)
variable.attributes

Ejemplo:
Código
Set objfso = createobject("scripting.filesystemobject")
Set archivo = objfso.getfile("C:tutorial.pdf") 'obtenemos el control sobre el
archivo pdf
Msgbox archivo.attributes                       'mensaje con los attributos del
archivo



En este ejemplo vemos que luego de declarar el objeto, lo que hacemos es obtener el control del el
archivo tutorial.pdf, para lo cual utilizamos getfile, y asignamos el archivo a la variable archivo.
Luego, y ya con el archivo en la variable, podemos utilizarlo directamente para mostrar sus
atributos, que no será más que un número que englobará todas las constantes de los atributos.
Las constantes que hacen referencia a los atributos de archivo son:
Valor   Atributo
0       Normal
1       Solo Lectura
2       Oculto
4       Sistema
8       Letra de disco
16      Carpeta/directorio
32      Archivo
64      Link o acceso directo
128     Comprimido

Como comentaba antes, attributes devolverá un valor único que será la sumatoria de cada uno de los
valores para cada atributo del archivo.
Como ejemplo:
Un archivo que tenga atributos de; solo lectura, oculto, de sistema, y de archivo, tendrá un valor de
1+2+4+32= 39

Cambiar atributos

Set variable = objfso.getfile(ruta)
variable.attributes = sumaatributos

Ejemplo:
Código
Set objfso = createobject("scripting.filesystemobject")
Set archivo = objfso.getfile("C:tutorial.pdf") 'obtenemos el control sobre el
archivo pdf
archivo.attributes = 34                         'attributo dearchivo y oculto



El cambiar atributos consiste simplemente en asignar un valor a attributes.
En el ejemplo anterior he puesto como valor 34 que representa atributos de archivo y oculto.

Propiedades de archivos y carpetas

Así como podemos obtener y modificar los atributos de los archivos y carpetas, podemos acceder a
determinadas propiedades de los mismos, entre ellas:
• Nombre; name
• Nombre corto; shortname
• Tamaño; Size
• Ruta completa; path
• Ruta corta; shortpath
• Fecha de creación/modificación/último acceso; datecreated, datelastmodified, datelastaccessed
• Tipo de archivo; type
• Carpeta contenedora; parentfolder

Estas son las principales propiedades a las que podemos acceder, lo cual se hará de la siguiente
forma:

Set variable = objfso.getfile(ruta)
Msgbox variable.propiedad

Ejemplo:
Código
Set objfso = createobject("scripting.filesystemobject")
Set archivo = objfso.getfile("C:tutorial.pdf")         'obtenemos el control
sobre el archivo pdf
Msgbox archivo.size                                     'tamano del archivo en
bytes



Para obtener otras propiedades, simplemente sería cuestión de cambiar "size" por alguna de las
otras propiedades a las que tenemos acceso (les recomiendo probar con cada una para ver los
resultados), y de igual manera, se haría con carpetas en lugar de archivos, para lo que solamente
tendríamos que cambiar getfile, por getfolder.

Listar subcarpetas

Con listar subcarpetas, nos referimos a, acceder a la colección de subcarpetas de una carpeta "X",
para trabajar con cada una de ellas de manera independiente.
Cuando hablamos de colección, hacemos referencia a un array, en el que están todos los elementos
contenidos en un determinado "listado".

Set variable = objfso.getfolder(ruta)
Set subvariable = variable.subfolders

Ejemplo:
Código
Set objfso = createobject("scripting.filesystemobject")
Set micarpeta = objfso.getfolder("C:Carpeta")          'obtenemos el control
sobre la carpeta
Set subcarpetas = micarpeta.subfolders          'obtenemos la coleccion de
subcarpetas
For each s in subcarpetas                               'por cada carpeta(s) en
la coleccion(subcarpetas)
Msgbox s.name                                                 'mensaje con el nombre
Next                                                          'pasamos a la siguiente
subcarpeta



Bueno, como se ve en este caso, el acceder a las subcarpetas no es totalmente directo, sino que, en
un principio, obtenemos la colección (array) de carpetas, para luego trabajar con cada una de ellas
por medio de un for que recorre toda la colección.
Al listar subcarpetas, se debe de terner en cuenta además, que la colección, solamente contiene, las
carpetas del primer nivel, y no las que se encuentran en los niveles consiguientes, para que quede
más claro:

C:carpeta
C:carpetanivel1
C:carpetanivel1nivel2

Si listamos la colección de subcarpetas en la carpeta "C:carpeta", obtendremos todas las del nivel
1, pero no las del nivel 2, para eso, deberíamos de implementar otro for que haga referencia a estas.

Listar discos/particiones

Al igual que para listar subcarpetas, para listar discos y particiones lo haremos a traves de una
colección, por lo que en realidad, será muy similar al punto anterior.


Set variable = objfso.getfolder(ruta)
Set discos = variable.drives

Ejemplo:
Código
Set objfso = createobject("scripting.filesystemobject")
Set discos = objfso.drives                                      'obtenemos la
coleccion de discos
For each d in discos                                    'por cada disco(d) en la
coleccion(discos)
Msgbox d.driveletter                                    'mensaje con la letra de
disco
Next                                                    'pasamos al siguiente
disco



Como ya se había dicho, el método de listar los discos y particiones, es el mismo que para obtener
las subcarpetas de una carpeta, por lo que no debería de presentar ningún problema el hacerlo.
También aclarar, que en el anterior ejemplo, solo he incluído una propiedad que no se había visto
anteriormente, y esta es la de driveletter, y que como ya se habrán dado cuenta, hace referencia a la
letra que tiene asignado el disco o partición en el sitema, por lo que una vez mencionado esto,
pasaremos justamente, a identificar, cuales son las propiedades de disco a las que tendremos acceso.

Propiedades de disco

Como hemos visto en el anterior punto, a traves del objecto FSO es posible acceder a la colección
de discos, así como a sus propiedades, siendo estas propiedades, las
siguientes:
•   Letra; driveletter
•   Nombre del disco; volumename
•   Espacio disponible; availablespace
•   Espacio libre; freespace
•   Espacio total; totalsize
•   Disponibilidad; isready
•   Ruta; path
•   Sistema de ficheros (NTFS, FAT, CDFS); filesystem
•   Carpeta principal; rootfolder
•   Número de serie; serialnumber
•   Nombre compartido; sharename
•   Tipo de disco; drivetype

Ejemplo, no pondré en este caso, ya que es sería igual al que he puesto anteriormente.

Por otra parte, solamente profundizaré en una de las propiedades de los discos (creo que las otras
son facilmente identificables), y es justamente, la última que he enumerado, drivetype.
El tipo de disco de un disco (valga la redundancia), puede estar entre los siguientes:
Valor    Tipo
0        Unknown/Desconocido
1        Removable/Removible
2        Fixed/Rígido
3        Network/Red
4        CD-Rom
5        RAM Disk

También he de acotar, que la disquetera (Unidad A), es reconocida como disco extraíble, así como
también ocurre, con las unidades virtuales, ej; aquellas carpetas montadas con el comando SUBST
de ms-dos.

Rutas de carpetas

Por último, pero no menos importante, debo de comentar que el objecto FSO, permite obtener la
ruta de tres de las carpetas más importantes del sistema, como lo son:
• Windows (0)
• System32 (1)
• Temp (2)

Para acceder a ellas, haremos uso de la función getspecialfolder.

Set variable = objfso.getspecialfolder(constante)

Ejemplo:
Código
Set objfso = createobject("scripting.filesystemobject")
Set micarpeta = objfso.getspecialfolder(0)              'obtenemos el control
sobre la carpeta
Msgbox micarpeta.path                           'mensaje con la ruta de la
carpeta


Como se ve en ejemplo, en este caso, nos hacemos con el control de la carpeta de windows, y luego
mostramos su ruta, para poder acceder a las carpetas, las constantes son las que he indicado en un
entre parentesis en un principio, al nombrar las carpetas.
Bueno, con esto hemos terminado con el objeto FSO, pasemos entonces al segundo y principal
objeto, la shell.

Shell (wscript.shell)

A través de este objeto podemos entre otras cosas:
• Mostrar mensajes temporizados
• Leer, borrar, y escribir en el registro de windows
• Ejecutar aplicaciones (dos métodos)
• Obtener el foco de una ventana
• Enviar pulsaciones de teclado
• Acceder multiples carpetas de sistema
• Obtener variables del sistema
• Crear accesos directos

Mostrar mensajes temporizados

Esta es la menos importante de todas las funciones de este objeto, pero no deja de ser útil en algunas
ocasiones, sobre todo, si no queremos que un proceso se bloquee, solo por intentar mostrar un
mensaje. Para que quede más claro, a lo largo de todos los ejemplo que he puesto, he ido mostrando
determinados mensajes a traves de la función de msgbox (opción básica). Los mensajes generados
con dicha función, no salen de pantalla, hasta bien el usuario, no da click en el/los botones que tiene
el cuadro de mensaje, por lo que en caso de utilizar un mensaje de este tipo, la ejecución de nuestro
script, se parará hasta bien este no salga de pantalla.
Pero en lugar de utilizar este tipo de mensaje, podemos hacer uso de una mensaje popup, la cual
desaparecerá sola al cabo del tiempo que hayamos especificado, luego de lo cual, continuará la
ejecución del script.
Modo en el que se emplea esta ventana:

Variablemensaje = variable.popup(texto, tsegundos, título, botones)

Ejemplo:
Código
Set objshell = createobject("Wscript.shell")
rmensaje = objshell.popup("Este es un mensaje de prueba",3,"Mensaje Popup",64)


El resultado;




Para empezar, se puede apreciar que el objeto shell, se declara con Wscript.shell, y bueno, lo
referente al mensaje, creo que una imagen dice más que mil palabras, hemos mostrado un mensaje
en pantalla, el cual al cabo de 3 segundos, desaparecera y dará paso al resto de nuestro script.
Si se ha mirado detenidamente, se notará que para los "botones" he puesto el valor 64, este valor,
hace referencia a la sumatoria de los botones e iconos que aparecen en la ventana de mensaje,
siendo los mismos:

Botones:
Valor    Descripción
0        OK
1        OK y Cancelar
2        Abortar, Reintentar e Ignorar
3        Si, No y Cancelar
4        Si y No
5        Reintentar y Cancelar

Iconos
Valor    Descripción
16       Parar/Error
32       Pregunta
48       Exclamación
64       Información

En el caso de mi mensaje, el 64 corresponde a la suma del botón de ok (cero) y el icono de
información (64)
Si quisieramos mostrar un mensaje de Si, No y Cancelar, con un icono de pregunta, deberíamos de
poner como valor el número 35 (3+32).




Por otro lado, también vemos en el ejemplo como el popup, se guarda en una variable de nombre
rmensaje. En dicha variable, se guarda el valor de la respuesta dada al mensaje, es decir, para el
caso de un mensaje con los botones de Si, No y Cancelar, la variable rmensaje guardaría el valor de
cual de esos botones fue presionado por el usuario, siendo estas las posibilidades:
Valor    Descripción
1        OK
2        Cancelar
3        Abortar
4        Reintentar
5        Ignorar
6        Si
7        No

Es decir, que en caso de que la persona presione Si, el resultado obtenido será 6, esto puede
servirnos de mucho si queremos darle un poco de interactividad a nuestros scripts y tomar
diferentes caminos en virtud de las respuestas de los usuarios, lo cual puede ser utilizado junto a las
funciones de msgbox (para esta también valen los botones e iconos) e inputbox, aunque a pesar de
la mención las veremos en detalle, ya que no dependen de ningún objeto, y son de fácil
comprensión.

Leer, borrar y modificar el registro de windows

Sin lugar a dudas, es una de las funciones más atractivas de este objeto, y su implementación no
implica ninguna dificultad, y aún así, la implementación de esta función, no presenta ninguna
dificultad.

Leer valores
variable.regread(llave de registro)

Ejemplo:
Código
Set objshell = createobject("wscript.shell")
Msgbox
objshell.regread("HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerShell
FoldersMy Pictures")
        'va todo en una misma linea, la llave es muy larga



Sencillo de entender, a través del objeto shell llamamos a la función regread, encargada de leer las
llaves del registro, en este caso, he optado por una llave un tanto larga, pero que contiene la ruta de
la carpeta de "mis imágenes", al igual que en otros ejemplos, muestro el valor por medio de un
msgbox, pero como en todos los casos, es posible guardar este valor en una variable para luego
trabajar con ella.

Borrar valores

variable.regdelete(llave de registro)

Ejemplo:
Código
Set objshell = createobject("wscript.shell")
objshell.regdelete("HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerShel
l FoldersMy Pictures")



Al igual que para leer, el borrar cadenas no tiene nada de especial, sino que simplemente debemos
de llamar a la función regdelete para deshacernos de la cadena en cuestión.

Escribir/modificar el registro

Algo que de seguro le interesará a varios.

variable.regwrite(llave de registro, valor, tipo de dato)

Ejemplo:
Código
Set objshell = createobject("wscript.shell")
objshell.regwrite("HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesSyste
mDisableTaskMgr",1,"REG_DWORD")
        'va todo en una misma linea, la llave es muy larga



En este ejemplo, estaríamos modificando la llave del registro que deshabilita el administrador de
tareas (taskmgr).
Los datos que debemos de pasarle a esta función son; la llave a modificar/crear claro esta, el valor
que le daremos, en mi ejemplo ha sido 1, y el tipo de datos que estamos ingresando.
Como muchos sabrán, el registro de windows soporta ciertos tipos de datos en las diferentes claves
de las que hace uso, a saber:
Tipo                   Descripción
REG_SZ                 Cadena
REG_DWORD              Numérico
REG_BINARY             Binario
REG_EXPAND_SZ Una cadena expandible
Existe un quinto tipo de datos, el REG_MULTI_SZ, pero no es soportado por esta función.

Tener en cuenta que regwrite puede tener problemas con cadenas demasiado largas, y considerar
también, que tal como he puesto en el título, regwrite creará una llave en caso de no existir, y la
modificará en caso de que ya esté presente.
También he de recomendar que en caso de trabajar con el registro se ha de tener mucho cuidado, y
que quererse dejar el code más legible, se utilicen las siguientes
abreviaciones (lo he hecho en mi ejemplo):
Llave principal                 Abreviación
HKEY_CURRENT_USER               HKCU
HKEY_LOCAL_MACHINE              HKLM
HKEY_CLASSES_ROOT               HKCR
HKEY_USERS                      HKEY_USERS
HKEY_CURRENT_CONFIG             HKEY_CURRENT_CONFIG

Ejecutar aplicaciones

Como he comentado antes, a traves de este objeto existen dos métodos diferentes de ejecutar
aplicaciones, los cuales además, tendrán diferentes opciones y resultados.

Método Run

Este es el más simple y usado de los dos métodos.

variable.run rutaprograma, estadoventana, espera

Ejemplo:
Código
Set objshell = createobject("wscript.shell")
Objshell.run "notepad", 1, true



En este caso ejecutamos el bloc de notas, en modo normal, y establecemos, que el script se pause
(true) hasta que se cierre la aplicación (notepad).
Los estados en los que se puede abrir la ventana, van del 0 al 10, pasando por oculto, maximizado y
minimizado, entre otros, pero pasaré de explicar cada uno de ellos ya que resulta mejor opción
probar y ver el resultado, que lo que podría ser la explicación.
Lo que si cabe destacar, es el estado 0 (cero) o vbhide, que ejecuta una aplicación en modo oculto,
sin mostrar ningún tipo de ventana. Probar por ejemplo sustituyendo el número 1 por vbhide en el
ejemplo que he dejado, para ver (en realidad no se verá nada) como se ejecuta el notepad sin
mostrar ninguna ventana (si se verá el proceso en el administrador de tareas).
Tener en cuenta además, que el estado de la ventana, y la espera del programa, son totalmente
opcionales , así que con poner simplemente objshell.run "notepad" hubiese alcanzado.

Método Exec
Este método es muy similar al anterior, solamente que nos permite un mayor control sobre la
aplicación que estamos corriendo, con la excepción de que no nos permite seleccionar estado de la
ventana.

variable.exec(rutaprograma)

Ejemplo:
Código
Set objshell = createobject("wscript.shell")
Objshell.Exec("notepad")



Como vemos, el método en el que se ejecuta la aplicación es practicamente igual al anterior,
solamente hemos sutituído run por exec y no hemos pasado ningún parámetro

a la función, pero ahora veamos que es lo que o hace diferente del otro método.
• Status
• ProcessID
• Terminate
• Stdin, Stdout, Stderr

Estas serían las funciones que diferencian el exec del run, todas estas se aplican sobre la aplicación/
comando que estamos ejcutando, por lo que, para hacer uso de esta funcionalidad, es necesario
ejecutar la aplicación, y asignar la misma a una variable para luego trabajar a traves de esta.
Veamos esto, junto a la explicación de status y processid
El status identifica el estado de la aplicación ejecutada, 0 (cero) representa una aplicación en
ejecución, y 1 (uno), indentifica que la aplicación fue cerrada y su proceso ya no se encuentra
presente.
Con respecto al processid, creo que salta a la vista la función del mismo, no es más que el
identificador de proceso (PID).

Ejemplo:
Código
Set objshell = createobject("wscript.shell")
Set bloc = Objshell.Exec("notepad")
Msgbox bloc.status
Msgbox bloc.processid



En este ejemplo, ejecutamos el bloc de notas, asignando su proceso a la variable "bloc", y luego
mostramos dos mensajes, uno con el status (debería de ser 0), y otro con el número de proceso.
La función status nos servirá en definitiva, para poder monitorear nuestro proceso, y realizar una
determinada acción en función de si permanece abierto, o bien, lo han cerrado.

Ejemplo:
Código
Set objshell = createobject("wscript.shell")
Set bloc = objshell.Exec("notepad")
Do while bloc.status = 0
        Wscript.sleep 200       'sirve para hacer una pausa de x milesimas de
segundo
loop
msgbox "Se ha cerrado el bloc de notas"
Pasemos entonces a terminate

Esta función, permite terminar el proceso que habíamos iniciado, por lo que por su nombre era fácil
predecirlo

Ejemplo:
Código
Set objshell = createobject("wscript.shell")
Set bloc = objshell.Exec("notepad")
Wscript.sleep 5000                      'Pausa de 5000 milesimas, o 5 segundos
bloc.terminate



Abrimos el bloc de notas, realizamos una espera de 5 segundos, y cerramos el bloc de notas, fácil.

Pasando ahora a las últimas funciones de exec; stdin, stdout, stderr, debo de aclarar que estas
funciones pueden ser utiles a la hora de trabajar en línea de comandos, pero dado que en línea de
comandos hay mejores maneras (a mi criterio) de hacerlo, obviaré la explicación de dos de estas
funciones, y solo le daré importancia a stdout que si puede facilitarnos la tarea en la ejecución de
comandos de ms-dos.

Stdout nos muestra la salida de un los comandos ejecutados a traves de exec, y para que se entienda
mejor, pasare directamente a un..

Ejemplo:
Código
Set objshell = createobject("wscript.shell")
Set ping = objshell.exec("cmd /c ping www.google.com")
Msgbox ping.stdout.readall



El resultado:




En este ejemplo, hemos ejecutado un ping a google a traves del cmd, y luego por medio de stdout y
su readall hemos leído el contenido completo de la salida del comando y lo hemos mostrado en un
msgbox.
También, en lugar de readall podemos utilizar read(x), donde x es el número de caracteres que
queremos leer.
En un ejemplo un poco mas "elaborado", haremos lo mismo que antes, pero esta vez haciendo uso
de read, leeyendo el texto completo, pero carácter a carácter.
Código
Set objshell = createobject("wscript.shell")
Set ping = objshell.exec("cmd /c ping www.google.com")
do
if not ping.stdout.atendofstream then
respuesta = resultado & ping.stdout.read(1)
else
exit do
end if
loop
msgbox respuesta



Este ejemplo, es un poco más dificil de explicar, así como también lo es entender, por lo que quien
quiera entenderlo deberá prestar atención y visualizarlo detenidamente.
En resumen, ejecutamos el ping a google, y luego nos metemos en un bucle infinito (do), dentro de
este, un análisis condicional, si no se alcanza el final de la salida (stdout.atendofstream), la variable
respuesta, es igual a la propia variable y un carácter (concatenamos). Ese analisis se continuará
haciendo hasta que se alcance el final de la lectura, es ahí donde entonces, pasamos al else, y el else
dice que, se sale del bucle do (exit do).
Por lo que en definitiva, el if se ejecutará una y otra vez, e ira guardando en la variable (respuesta)
letra por letra hasta formar el mensaje completo, cuando se llegue al final, se saldrá del bucle, y se
mostrara el msgbox con la "respuesta". Un poco más complicado, pero espero se entienda la idea de
este ejemplo.

Obtener el foco de una ventana

Variable.appactivate tituloventana

Ejemplo.
Código
Set objshell = createobject("wscript.shell")
Objshell.appactivate "Sin titulo"



Con esto, obtendríamos el foco de una ventana con por ejemplo, el título "Sin título – Bloc de
notas", que como se habrán dado cuenta, es el título que tiene un nuevo bloc de notas.
Las consideraciones que debemos de tener en cuenta al utilizar esta función, son las referentes al
orden en el que realiza las comparaciones en busca de nuestra ventana;
• Primero busca la ventana que tiene el título exacto que hemos establecido
• Si no encuentra el título exacto, busca aquella ventana que coincida en el principio del título
• Si no encuentra ni el título exacto, ni tampoco encuentra título que comience como el nuestro,
entonces busca aquel que termina como el que queremos.
• También, en el caso de haber varias ventanas con el mismo nombre, elegira una cualquiera al
azar, y le dará el foco.

Enviar pulsaciones del teclado

Otra de las funciones llamativas de este objeto, es la función sendkeys que nos permitirá enviar
pulsaciones de teclado, como si estuviesemos escribiendo, así que hay que tener cuidado con el uso
que se da, ya que una vez ejecutada, enviará las pulsaciones a la ventana activa, por lo que si no es
lo que deseabamos, podemos terminar presionando un montón de teclas en un programa x, con los
resultados que ello puede acarrear.

Variable.sendkeys teclas

Ejemplo:
Código
Set objshell = createobject("wscript.shell")
Objshell.sendkeys "Estas son las teclas"
Este es un ejemplo muy simple ,que además no recomiendo probar, ya que como he dicho antes,
enviará las pulsaciones de las teclas a la ventana activa, y los resultados pueden no "gustarnos".
Es por eso que a continuación muestro un ejemplo más claro de esta función, haciendo uso además,
de funciones que hemos visto anteriormente.
Código
Set objshell = createobject("wscript.shell")
Set bloc = objshell.exec("notepad")              'ejecutamos el bloc de notas
Wscript.sleep 2000                                       'espera de dos segundos
Objshell.appactivate bloc.processid              'ponemos el foco en la ventana
del bloc
Wscript.sleep 200                                        'espera de milesimas
Objshell.sendkeys "Tutorial vbs"                         'enviamos un mensaje con
sendkeys
Objshell.sendkeys "{ENTER}"                      'luego del mensaje anterior, un
ENTER
Wscript.sleep 2000                                       'nueva espera de dos
segundos
Objshell.sendkeys "Probando la funcion sendkeys"                 'enviamos una
segunda linea de mensaje



Como había dicho, en este ejemplo he hecho uso de algunas otras fuciones vistas anteriormente.

Para empezar he optado por ejecutar el bloc de notas a traves de la función exec, podría optarse por
run, pero este ejemplo me servía para mostrarles el uso que puede hacerse del processid. Como
vemos, a la hora de obtener el foco de la ventana con appactivate, he puesto como "título" el
processid, ya que vbs nos permite hacer uso conjunto de estas dos funciones, para de este modo
asegurarnos de que el foco se ponga en la ventana que corresonde y no en otra con similar nombre.
Al igual que antes, podríamos poner simplemente el nombre de la ventana del bloc de notas en lugar
de processid, pero igualmente creo no quedarán dudas de por que el uso de esta.

Luego, con respecto al envío de las teclas, no creo que merezca explicación alguna, ya que es
simplemente el mensaje/pulsación que queremos envíar.
Igualmente habrán visto en medio del envío de teclas que también esta presente una tecla especial,
el {ENTER}, es por eso que dejo a continuación, la tabla con el listado de argumentos para estas
teclas:
Tecla               Argumento
BACKSPACE           {BACKSPACE}, {BS}, or {BKSP}
BREAK               {BREAK}
CAPS LOCK           {CAPSLOCK}
DEL or DELETE       {DELETE} or {DEL}
DOWN ARROW          {DOWN}
END                 {END}
ENTER               {ENTER} or ~
ESC                 {ESC}
HELP                {HELP}
HOME                {HOME}
INS or INSERT       {INSERT} or {INS}
LEFT ARROW          {LEFT}
NUM LOCK            {NUMLOCK}
PAGE DOWN           {PGDN}
PAGE UP             {PGUP}
PRINT SCREEN         {PRTSC}
RIGHT ARROW          {RIGHT}
SCROLL LOCK          {SCROLLLOCK}
TAB                  {TAB}
UP ARROW             {UP}
F1                   {F1}
F2                   {F2}
Fx                   {Fx}

Para el caso de las teclas SHIFT, CTRL y ALT, los argumentos con +, ^ y % respectivamente, no
siendo posible utilizar, la tecla PRTSC, o lo que es igual, la tecla de PRINT (la que se utiliza para
capturar pantalla). Para utilizar estas tres letras;
Objshell.sendkeys "+A"
Objshell.sendkeys "^V"
Objshell.sendkeys "%{TAB}"

Carpetas "especiales"

Con carpetas especiales me refiero a aquellas carpetas como "Inicio", "Enviar a" y "Favoritos"
entre otras. Para eso, haremos uso de la función specialfolders

Variable.specialfolders(carpeta)

Ejemplo:
Código
Set objshell = createobject("wscript.shell")
Msgbox objshell.specialfolders("Desktop")



Con lo que obtendríamos un msgbox, con la ruta del escritorio, algo como "C:Documents and
SettingsNovluckerEscritorio", de igual modo y como he mencionado antes, podemos acceder a las
rutas de otras carpetas, para lo que, contamos con la siguiente tabla.
Carpeta               Identificador
Escritorio            AllUsersDesktop
Menú Inicio           AllUsersStartMenu
Programas             AllUsersPrograms
Inicio                AllUsersStartup
Escritorio            Desktop
Favoritos             Favorites
Fuentes               Fonts
Mis documentos        MyDocuments
Entorno de red        NetHood
Impresoras            PrintHood
Programas             Programs
Reciente              Recent
Enviar a              SendTo
Menú Inicio           StartMenu
Inicio                Startup
Plantillas            Templates

Con esta tabla, solo bastaría cambiar "desktop" en nuestro ejemplo, para ver las rutas de otras de las
carpetas disponibles, y nótese también que si bien, algunas carpetas

parecen estar repetidas, algunos identificadores hacen referencia a las carpetas de todos los
usuarios, y otras a la del usuario activo.

Obtener variables de sistema

Bueno, habrán visto entonces, que a pesar de la cantidad de carpetas de las que se puede obtener la
ruta, hay algunas muy interesantes que no aparecen con el specialfolders, como ser "Archivos de
programa", la carpeta de usuario, etc. , es por eso que entonces, haremos uso de la función
expandenvironmentstrings.
Este función, y como se ha adelantado en el título, permite acceder a todas las variables del sistema,
como ser, USERNAME, USERPROFILE, COMPUTERNAME, y todas aquellas que aparecen a
través del comando SET de ms-dos.

Variable.expandenvironmentstrings(%variablesistema%)

Ejemplo:
Código
Set objshell = createobject("wscript.shell")
Msgbox objshell.expandenvironmentstrings("%Programfiles%")



Como es de esperarse, en este caso, nos aparecerá un mensaje con la ruta de la carpeta de "Archivos
de programa".

Crear accesos directos

Bueno, luego de haber visto ya, varias funciones, solo queda por ver, la de createshortcut, la cual
permite crear accesos directos a cualquier aplicación/archivo, quizás parezca una función un poco
"insulsa", pero quizás alguien quiera por ejemplo, agregar un acceso directo en la carpeta de Inicio,
y será aquí cuando recurramos a esta función.
En esta función es necesario definir varios valores, así que en lugar de explicarla, pasaré
directamente a un ejemplo:
Código
Set objshell = createobject("wscript.shell")
Set ellink = objshell.createshortcut("C:Acceso directo.lnk")           'creamos
el link
Ellink.targetpath = "C:windowsnotepad.exe"            'completamos los valores
Ellink.windowstyle = 1
Ellink.hotkey = "CTRL+SHIFT+N"
Ellink.iconlocation = "C:windowsnotepad.exe,0"
Ellink.description = "Acceso directo a notepad"
Ellink.workingdirectory ="C:"
Ellink.save                                                     'guardamos el
link



Creo que este ejemplo alcanza para entender sin problemas esta función, no hacemos más que crear
el link, completamos todos los datos que lleva el link, y salvamos.
Los campos a completar son los que aparecen en cualquier link (imagen adjunta), teniendo en
cuenta demás que no todos son indispensables.
Falta agregar, que pueden crearse links a páginas web’s del siguiente modo.

Ejemplo:
Código
Set objshell = createobject("wscript.shell")
Set weburl = objshell.createshortcut("C:google.url")
Weburl.targetpath = http://www.google.com
Weburl.save



Simplemente hemos cambiado la extensión del link a url, en lugar de lnk como tenía antes, y la ruta
del link pasa a ser la dirección de la web a la que queremos acceder.




Bueno, así termina la segunda parte de este tutorial, en donde he intentado mostrar a quienes no
tienen conocimientos, los dos principales objetos de la "librería" de vbs, espero se haya entendido ,
y como he dado a entender en mi primer mensaje, la idea es ir agregando nuevo objetos,
seguramente no agregaré más post, pero si agregaré y colgaré en el "temario" enlaces para descarga
de pdf




Saludos

Continuará....

Más contenido relacionado

La actualidad más candente

E-Learning: Ziele, Verfahren, Strategien, Trends
E-Learning: Ziele, Verfahren, Strategien, TrendsE-Learning: Ziele, Verfahren, Strategien, Trends
E-Learning: Ziele, Verfahren, Strategien, TrendsRoland Klemke
 
NLP State of the Art | BERT
NLP State of the Art | BERTNLP State of the Art | BERT
NLP State of the Art | BERTshaurya uppal
 
Simulation - Generating Continuous Random Variables
Simulation - Generating Continuous Random VariablesSimulation - Generating Continuous Random Variables
Simulation - Generating Continuous Random VariablesMartin Kretzer
 
Lecture: Regular Expressions and Regular Languages
Lecture: Regular Expressions and Regular LanguagesLecture: Regular Expressions and Regular Languages
Lecture: Regular Expressions and Regular LanguagesMarina Santini
 
Natural Language Processing
Natural Language ProcessingNatural Language Processing
Natural Language ProcessingToine Bogers
 
Natural Language Processing
Natural Language ProcessingNatural Language Processing
Natural Language ProcessingIla Group
 
Gpt1 and 2 model review
Gpt1 and 2 model reviewGpt1 and 2 model review
Gpt1 and 2 model reviewSeoung-Ho Choi
 
Word Embeddings, why the hype ?
Word Embeddings, why the hype ? Word Embeddings, why the hype ?
Word Embeddings, why the hype ? Hady Elsahar
 
Dynamic programming
Dynamic programmingDynamic programming
Dynamic programmingGopi Saiteja
 
Chapter1 Formal Language and Automata Theory
Chapter1 Formal Language and Automata TheoryChapter1 Formal Language and Automata Theory
Chapter1 Formal Language and Automata TheoryTsegazeab Asgedom
 
NLP_KASHK:Evaluating Language Model
NLP_KASHK:Evaluating Language ModelNLP_KASHK:Evaluating Language Model
NLP_KASHK:Evaluating Language ModelHemantha Kulathilake
 
Working with arrays in php
Working with arrays in phpWorking with arrays in php
Working with arrays in phpKamal Acharya
 
Introduction to natural language processing
Introduction to natural language processingIntroduction to natural language processing
Introduction to natural language processingMinh Pham
 

La actualidad más candente (20)

E-Learning: Ziele, Verfahren, Strategien, Trends
E-Learning: Ziele, Verfahren, Strategien, TrendsE-Learning: Ziele, Verfahren, Strategien, Trends
E-Learning: Ziele, Verfahren, Strategien, Trends
 
Ai lab manual
Ai lab manualAi lab manual
Ai lab manual
 
NLP State of the Art | BERT
NLP State of the Art | BERTNLP State of the Art | BERT
NLP State of the Art | BERT
 
Document similarity
Document similarityDocument similarity
Document similarity
 
Simulation - Generating Continuous Random Variables
Simulation - Generating Continuous Random VariablesSimulation - Generating Continuous Random Variables
Simulation - Generating Continuous Random Variables
 
Lecture: Regular Expressions and Regular Languages
Lecture: Regular Expressions and Regular LanguagesLecture: Regular Expressions and Regular Languages
Lecture: Regular Expressions and Regular Languages
 
What is word2vec?
What is word2vec?What is word2vec?
What is word2vec?
 
NLTK in 20 minutes
NLTK in 20 minutesNLTK in 20 minutes
NLTK in 20 minutes
 
Natural Language Processing
Natural Language ProcessingNatural Language Processing
Natural Language Processing
 
Pumping lemma (1)
Pumping lemma (1)Pumping lemma (1)
Pumping lemma (1)
 
Natural Language Processing
Natural Language ProcessingNatural Language Processing
Natural Language Processing
 
Gpt1 and 2 model review
Gpt1 and 2 model reviewGpt1 and 2 model review
Gpt1 and 2 model review
 
LSA algorithm
LSA algorithmLSA algorithm
LSA algorithm
 
Word Embeddings, why the hype ?
Word Embeddings, why the hype ? Word Embeddings, why the hype ?
Word Embeddings, why the hype ?
 
Dynamic programming
Dynamic programmingDynamic programming
Dynamic programming
 
Chapter1 Formal Language and Automata Theory
Chapter1 Formal Language and Automata TheoryChapter1 Formal Language and Automata Theory
Chapter1 Formal Language and Automata Theory
 
NLP_KASHK:Evaluating Language Model
NLP_KASHK:Evaluating Language ModelNLP_KASHK:Evaluating Language Model
NLP_KASHK:Evaluating Language Model
 
Grep
GrepGrep
Grep
 
Working with arrays in php
Working with arrays in phpWorking with arrays in php
Working with arrays in php
 
Introduction to natural language processing
Introduction to natural language processingIntroduction to natural language processing
Introduction to natural language processing
 

Destacado

QTP VB Script Trainings
QTP VB Script TrainingsQTP VB Script Trainings
QTP VB Script TrainingsAli Imran
 
Fundamentos de la mecatrónica por francisco esaul servin cosgaya
Fundamentos de la mecatrónica por francisco esaul servin cosgayaFundamentos de la mecatrónica por francisco esaul servin cosgaya
Fundamentos de la mecatrónica por francisco esaul servin cosgayaPako Yeah
 
Basic vbscript for qtp
Basic vbscript for qtpBasic vbscript for qtp
Basic vbscript for qtpCuong Tran Van
 
Ingenieria de control w bolton
Ingenieria de control w boltonIngenieria de control w bolton
Ingenieria de control w boltonMaGuArGu
 
Todo lo que se debe saber para la selección de bombas y diseños de sistemas h...
Todo lo que se debe saber para la selección de bombas y diseños de sistemas h...Todo lo que se debe saber para la selección de bombas y diseños de sistemas h...
Todo lo que se debe saber para la selección de bombas y diseños de sistemas h...dgalindo10
 

Destacado (9)

vb script
vb scriptvb script
vb script
 
QTP VB Script Trainings
QTP VB Script TrainingsQTP VB Script Trainings
QTP VB Script Trainings
 
Fundamentos de la mecatrónica por francisco esaul servin cosgaya
Fundamentos de la mecatrónica por francisco esaul servin cosgayaFundamentos de la mecatrónica por francisco esaul servin cosgaya
Fundamentos de la mecatrónica por francisco esaul servin cosgaya
 
Basic vbscript for qtp
Basic vbscript for qtpBasic vbscript for qtp
Basic vbscript for qtp
 
Vb script hx-c-wd
Vb script hx-c-wdVb script hx-c-wd
Vb script hx-c-wd
 
Vb script
Vb scriptVb script
Vb script
 
Ingenieria de control w bolton
Ingenieria de control w boltonIngenieria de control w bolton
Ingenieria de control w bolton
 
Todo lo que se debe saber para la selección de bombas y diseños de sistemas h...
Todo lo que se debe saber para la selección de bombas y diseños de sistemas h...Todo lo que se debe saber para la selección de bombas y diseños de sistemas h...
Todo lo que se debe saber para la selección de bombas y diseños de sistemas h...
 
Instrumentacion industrial creus 8th
Instrumentacion industrial   creus 8thInstrumentacion industrial   creus 8th
Instrumentacion industrial creus 8th
 

Similar a VBScript Tutorial

Similar a VBScript Tutorial (20)

1 herramientas desarrollo de software
1 herramientas desarrollo de software 1 herramientas desarrollo de software
1 herramientas desarrollo de software
 
Resumen Estructuras VB 6 1a Parte
Resumen Estructuras VB 6 1a ParteResumen Estructuras VB 6 1a Parte
Resumen Estructuras VB 6 1a Parte
 
Taller completo
Taller completoTaller completo
Taller completo
 
Mod2ud2 1
Mod2ud2 1Mod2ud2 1
Mod2ud2 1
 
Programacion MatLab
Programacion MatLabProgramacion MatLab
Programacion MatLab
 
Diapositiva
DiapositivaDiapositiva
Diapositiva
 
PRESENTACION
PRESENTACIONPRESENTACION
PRESENTACION
 
Codigo
CodigoCodigo
Codigo
 
Jyoc java-cap04 vectores (arrays)
Jyoc java-cap04 vectores (arrays)Jyoc java-cap04 vectores (arrays)
Jyoc java-cap04 vectores (arrays)
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
manual-batch-desde-0
manual-batch-desde-0manual-batch-desde-0
manual-batch-desde-0
 
Manual batch
Manual batchManual batch
Manual batch
 
Suma de imagenes
Suma de imagenesSuma de imagenes
Suma de imagenes
 
Aprendiendo de la sintaxiss
Aprendiendo de la sintaxissAprendiendo de la sintaxiss
Aprendiendo de la sintaxiss
 
Anyi amaya
Anyi amayaAnyi amaya
Anyi amaya
 
Turbo pascal 7 guia principal
Turbo pascal 7 guia principalTurbo pascal 7 guia principal
Turbo pascal 7 guia principal
 
Trabajo bucles bn
Trabajo bucles bnTrabajo bucles bn
Trabajo bucles bn
 
Ambiente
 Ambiente Ambiente
Ambiente
 
Ambiente de programación en pascal
Ambiente de programación en pascalAmbiente de programación en pascal
Ambiente de programación en pascal
 

VBScript Tutorial

  • 1. Tutorial de vbscript by Novlucker Temas • Introducción - pdf 1,2 • Operadores • Esctructuras de control • If • Case • For • While • Do • Manejo de objetos • Filesystemobject(FSO) - pdf 1, 2 • wshShell • wshNetwork - pdf 1, 2 • Dictionary - pdf 1, 2 • Commondialog - pdf 1, 2 Se irán añadiendo nuevos objectos para descarga en pdf Bueno, primero aclarar que este tutorial, pretende explicar de manera básica las distintas instrucciones aplicadas en visual basic script (vbs de aquí en más), para que así de este modo, todos aquellos interesados en este lenguaje de scripting, tengan la posibilidad de comenzar a desarrollar sus pequeños scripts. Introducción: Para empezar, debemos decir, que los vbs, tal y como lo dice su nombre, son "simples" scripts, que se ejecutan por medio de un intérprete en el sistema, con lo que bastará con crear el código en un simple bloc de notas (o similar), y guardarlo con extensión *.vbs, sin necesidad de realizar ninguna compilación (aunque existe la posibilidad). En este caso el intérprete es, el Windows Script Host de Microsoft, por lo que estará presente (aunque en distintas versiones) de manera predeterminada desde Win 98 en adelante, así que podremos hacer uso de estos archivos en prácticamente, todos los Windows. Se puede decir que los vbs son una mejora con respecto a los bat, ya que estos permiten una mayor interacción con el sistema operativo, y decir además que este lenguaje, es un derivado de Visual Basic, por lo que desde un principio y aunque de manera mucho más limitada, se podrá familiarizar con dicho leguaje (la sintaxis es similar en todos los aspectos). A tener en cuenta antes de comenzar: • En vbs no importan las mayúsculas o minúsculas VBscript = vbscript • Para indicar un final de línea, no se debe de hacer más que pasar a la siguiente (no es necesario terminar con por ejemplo " ; " como en javascript) • Los comentarios, van precedidos de una " ‘ " (comilla simple) ‘ Esto es un comentario • No es obligatorio declarar las variables, aunque es conveniente hacerlo para dejar más legible el
  • 2. código Se pueden declarar utilizando Dim, o bien, se les da valor directamente. Dim nuestravariable También puede ser utilizado Option explicit para así "obligarse" a declarar las variables (en los pequeños ejemplos lo haré así) En la mayoría de los ejemplos utilizaré la función msgbox, la cual se encarga de mostrar un mensaje en pantalla. Tipos de dato: Existen varios tipos de datos que pueden manejarse en vbs, y los que más vamos a utilizar, son ; Booleano, Byte, Fecha, Double, Entero, Entero largo, Objeto, Single, Cadena. Todos estos representan valores verdadero/falso, fecha/hora, númerosentero positivo/negativo, cadena de texto (no creo necesite más explicación que esta). Operadores: Tendremos varios tipos de operadores a nuestra disposición. 1. Aritméticos: Suma(+), Resta(-), Multiplicación(*), División decimal(/), División entero(), Potencia(^), Resto división(mod) 2. Comparación: Igual(=), Distinto(<>), Mayor(>), Menor(<), Menos o igual(<=), Mayor o igual(>=) 3. Lógicos: Y(and), O(or), Xor, No(not) 4. De cadena: Concatenación(&) Estos han sido a grandes rasgos, los operadores a utilizar en vbs, por lo que después, y haciendo uso de nuestro próximo tema (estructuras de control), se mostrarán algunos ejemplos. Estructuras de control: 1. IF (condicional) Esta se utiliza para evaluar 2 o más posibles resultados, en virtud del cual, se tomarán diferentes acciones. Citar Dim valor Valor = 8 If valor < 10 then Msgbox "El valor es MENOR a diez " Else Msgbox "El valor es MAYOR a diez " End if Como se ve en este ejemplo se comienza declarando la variable "valor", luego de esto, se le asigna el valor 8, y posterior a esto, se evalúa dicho valor (haciendo uso de los operadores de comparación vistos anteriormente), por lo que si el valor es menor a 10, se mostrará un mensaje en pantalla indicando que es MENOR, de lo contrario, el mensaje indicará MAYOR (en este caso le habíamos asignado el valor 8, por lo que será menor).
  • 3. 2. Case (condicional) En el caso del IF, si bien no se ha mostrado, existe la posibilidad de anidar dos o más, para así realizar varias evaluaciones, pero el caso es que cuando se realizan muchas, el código puede volverse algo engorroso. Es en estos casos, donde recurrimos al select case. Citar Dim numero numero = 8 Select case numero case 6 msgbox "El valor es seis " case 7 msgbox "El valor es siete " case 8 msgbox "El valor es ocho " End select Al igual que en el anterior, en este ejemplo, se comienza definiendo la variable "numero", y se le asigna 8 como valor. Luego con select case se indica que es lo que se va a revisar, en este caso, cuanto es el valor de "numero", luego, se indican las opciones con un case por cada una de ellas, en este caso, "case 6", en el caso de que el valor sea 6, "case 7", y "case 8", para el caso de que el valor sea 7 y 8 respectivamente (como sabemos es 8), es decir, "si es 6", mensaje "El valor es seis", "si es 7", mensaje "El valor es siete", y "si es 8", mensaje "El valor es ocho". 3. FOR (bucle) El for es utilizado cuando queremos repetir una determinada acción un cierto número de veces. Citar Dim i For i=1 to 5 step 1 Msgbox "El valor de i es: " & i Next Comenzamos definiendo la variable "i", luego de esto, inicializamos el bucle for, es decir, decimos que; desde "i" igual 1, a "i" igual 5, incrementando de a 1, mostraremos un mensaje con la frase "El valor de i es: " y luego de esto, el valor real de "i", por lo que en cada "paso" que de nuestro bucle, mostrará algo más o menos así… Como ven, 5 mensajes "casi" iguales, ya que la secuencia se repite 5 veces, y lo único que cambia es el valor de "i" (la hemos concatenado al mensaje con el carácter &), ya que va tomando distintos valores en cada uno de los "pasos". 4. FOR EACH(bucle) El for each, tiene la particularidad de que es un for que recorre todos los elementos de una colección o vector. Antes de continuar, intentaré explicar lo que es un "array", ya que será lo que utilicemos en el ejemplo. Un array o matriz, es una estructura de datos en forma de variable, que permite almacenar más de un único valor, dentro de una única variable. Para acceder a cada uno de estos valores, será necesario hacer uso de índices. Citar
  • 4. Dim nombres(2) nombres(0)= "Martín" nombres(1)= "Pablo " nombres(2)= "Carlos " Msgbox nombres(1) En este ejemplo, se define la variable "nombres" que tendrá espacio para 3 valores (tener en cuenta que comienza por 0, por eso que se ponga 2), y luego, se definen cada uno de los valores de "nombres". Por último utilizamos un mensaje, para mostrar el valor del índice 1 del array, con el siguiente resultado… Como se ve, el mensaje muestra el nombre "Pablo" porque al llamar al array, hemos puesto el índice 1, y como se ve cuando lo declaramos, le habíamos asignado valor "Pablo", en el caso de indicar 2 en lugar del 1, el mensaje mostraría "Carlos". Espero esto haya quedado lo suficientemente claro. Ahora, volviendo al For each (espero ya no te hayas olvidado), este podría ser utilizado en el caso del array (hay otros casos). Citar Dim nombres Dim n nombres = array("Martín","Pablo","Carlos") For each n in nombres Msgbox n next A pesar de que no lo parezca, es muy similar al anterior, y algunos estarán diciendo, "que tenía que ver el array con esto", pero si se fijan, solamente he mostrado, una segunda manera de declarar el array. En este caso, en lugar de ir metiendo cada uno de los valores con sus respectivos índices, declaro el array en una sola línea y va quedando organizado según el orden en el que meta los valores, por eso, "Martín" quedará en el lugar 0, "Pablo" en el lugar 1, y "Carlos", en el lugar 2, al igual que en el caso anterior. Esto con respecto al array, ahora a lo que íbamos, el for each. En líneas siguientes comenzamos con el for, y decimos, por cada "n" (la letra, en este caso "n" la elegimos nosotros) en "nombres" (es un array que contiene tres nombres), mensaje con el "n", o lo que es igual, por cada nombre, en el "contenedor" "nombres", mensaje con el nombre, y el resultado es el siguiente… Tanto en for simple, como en el for each, podemos hacer uso de exit for, para parar la ejecución del for completa. Para decirlo de otra manera, con esto escapamos al for. WHILE (bucle) El bucle while, es utilizado cuando queremos que una determinada acción se repita mientras una determinada condición de cumpla. Citar Dim numero
  • 5. Numero = 1 While numero <= 10 Msgbox numero numero = numero + 1 Wend Comenzamos el ejemplo declarando la variable numero, y le asignamos valor 10, luego ejecutamos bucle, mientras el valor de "numero" sea menor o igual a 10, mostramos mensaje con el valor de numero, y además le sumamos 1 al propio valor de numero (de este modo lo utilizamos a modo de contador), luego de 10 veces de mostrar mensaje, el valor de "numero" será igual a 11 y al verificarse la condición esta no se cumplirá, por lo que terminará. 5. DO (bucle) El bucle do tiene varias opciones, pero básicamente hará algo, "mientras", o "hasta que" ocurra algo. Citar Do Msgbox "Esto es un mensaje" Loop Este bucle, se repetirá al infinito, por lo que mostrará un mensaje, interminables veces. Ahora bien, este do, puede ser modificado, para tener algo más de control sobre él, y es justamente haciendo uso de esas condiciones que comentaba antes, "mientras", o "hasta que" Citar Dim a = 1 Do until a=10 Msgbox "Esto es un mensaje" Loop Este código se resume en; mensaje de "Esto es un mensaje" hasta que "a" sea igual a 10. En lugar de until podría utilizarse while, para cambiar la condición a mensaje de "Esto es un mensaje" mientras "a" sea distinta de 10. Citar Dim a = 1 Do while a<>10 Msgbox "Esto es un mensaje" Loop Y también puede utilizarse until y while, antes o después de ejecutarse el bucle Citar Do until/while condición (es distinta según sea until o while) Msgbox "Esto es un mensaje" Loop until/while Como se ve, este bucle nos permite darle varios usos según nos convenga, por lo que termina siendo muy versátil y útil. Al igual que para los for, en el caso de querer salir de un bucle do, también contamos con una función de escape, en este caso, exit do
  • 6. Así termina está pequeña introducción a las rutinas básicas de visual basic script, la idea es seguir extendiendo este "tuto", como comentario agrego además, que este lenguaje posee muchisimas funciones, las cuales no detallaré, ya que sería interminable, además de que me centraré más adelante, en explicar funciones expecificas de objetos. En el caso de querer más documentación al respecto, se pueden descargar la documentación sobre windows script host, donde tendrán la referencia a todas las funciones de las que podemos hacer uso. Windows Script 5.6 Documentation Manejo de objetos Anteriormente, he intentado mostrar las diferentes estructuras de control que nos permiten encaminar nuestros vbs, es por esto que ahora, pasaremos a los OBJETOS. Toda interacción de vbs con el sistema se basa en el manejo de objectos (ActiveX), que no son más que librerías especializadas y a nuestra diposición, por lo que dependiendo de lo que busquemos hacer, haremos uso de una u otra (mezclandolas en nuestros scripts) Nota: No haré uso de dim para declarar variables en los ejemplos, para así ahorrar espacio. Los objetos básicos de los que se hace uso son dos: 1. FSO (FileSystemObject): manejo de unidades, archivos y carpetas. 2. WshShell: acceso a información de sistema, trabajo con el registro, manejo accesos directos, ejecución de aplicaciones. Antes de continuar debo de explicar que al trabajar con los objetos, los mismos se deben de declarar de la siguiente manera: Set variable = createobject(objecto) Ejemplo: Set objfso = createobject("scripting.filssystemobject") Ahora sí, pasamos directamente al análisis del objeto FSO. FSO (File System Object) Las distintas funciones que se pueden realizar a través de este objeto son: • Borrar, mover y copiar archivos • Leer y escribir en archivos de texto (Crear) • Obtener y modificar atributos de archivos y carpetas • Crear, borrar, mover y copiar carpetas • Obtener propiedades de archivos y carpetas • Listar subcarpetas • Listar discos y particiones • Obtener propiedades de discos y particiones • Obtener determinadas rutas de sistema Mover archivos
  • 7. Objfso.movefile origen, destino Ejemplo: Código Set objfso = createobject("scripting.filesystemobject") Objfso.movefile "C:archivo.txt", "D:Carpeta" Borrar archivos Objfso.deletefile archivo Ejemplo: Código Set objfso = createobject("scripting.filesystemobject") Objfso.deletefile "C:archivo.txt" Copiar archivos Objfso.copyfile origen, destino, sobreescribir Ejemplo: Código Set objfso = createobject("scripting.filesystemobject") Objfso.copyfile "C:archivo.txt", "D:destino.txt", true Crear carpetas Set variable = objfso.createfolder(destino carpeta) Ejemplo: Código Set objfso = createobject("scripting.filesystemobject") Set micarpeta = objfso.createfolder("C:carpeta") Mover carpetas Objfso.movefolder origen, destino Ejemplo: Código Set objfso = createobject("scripting.filesystemobject") Objfso.movefolder "C:Carpeta", "D:Destino" Borrar carpetas Objfso.deletefolder carpeta
  • 8. Ejemplo: Código Objfso.deletefolder "C:Carpeta" Copiar carpetas Objfso.copyfolder origen, destino, sobreescribir Ejemplo: Código Set objfso = createobject("scripting.filesystemobject") Objfso.copyfolder "C:Carpeta", "D:Destino", true Leer y escribir en archivos Para el manejo de archivos de texto, debemos de tener en cuenta, la existencia o no del archivo, y el modo en el que accedemos a él. Obviamente, si un archivo no existe, no podrémos acceder a él, y a su vez, si abrimos un archivo en modo de léctura, nunca podremos escribir dentro. Crear archivos de texto y escribir en ellos Set variable = objfso.createtextfile(ruta, sobreescribir) Ejemplo: Código Set objfso = createobject("scripting.filesystemobject") Set archivotexto = objfso.createtextfile("C:archivo.txt",true) 'creamos el archivo archivotexto.writeline "Este es el texto que estoy escribiendo" 'escribimos una linea archivotexto.writeblanklines(2) 'escribimos 2 lineas en blanco archivotexto.writeline "Aqui mas texto" ' escribimos otra linea de texto archivotexto.close 'cerramos el archivo Notese que al comenzar, hemos creado el archivo y lo hemos asignado a una variable, luego hemos utilizado el identificador de archivo (variable), para escribir dentro de él, en este caso, hemos utilizado writeline, que escribe una línea, y agrega un retorno de carro para que si volvemos a escribir, lo hagamos en una nueva línea, en cambio , si en su lugar, utilizamos write, el resultado, será que no habrá salto de línea, por lo que todas las oraciones iran quedando una detrás de la otra. Por último, hemos cerrado el archivo. Abrir archivos de texto y escribir en ellos Set variable = objfso.opentextfile(ruta, modo, creación)
  • 9. Ejemplo: Código Set objfso = createobject("scripting.filesystemobject") Set archivotexto = objfso.opentextfile("C:archivo.txt",8,true) 'abrimos el archivo archivotexto.writeline "Este es el texto que estoy escribiendo" 'escribimos una linea archivotexto.close 'cerramos el archivo Como se puede ver, al abrir el archivo, hemos indicado la ruta, el modo 8 que se utiliza para appending o escritura al final de archivo, y true, que quiere decir que en caso de que no exista el archivo se cree, es decir que de este modo, no solo abrimos el archivo, sino que de no existir, dicho archivo será creado en el proceso. Para tener en cuenta, los modos en los que se puede abrir un archivo son: 1- Modo LECTURA 2- Modo ESCRITURA (escribe al principio) 8- Modo APPENDING (escribe al final) Como se puede ver, al abrir el archivo, hemos indicado la ruta, el modo 8 que se utiliza para appending o escritura al final de archivo, y true, que quiere decir que en caso de que no exista el archivo se cree, es decir que de este modo, no solo abrimos el archivo, sino que de no existir, dicho archivo será creado en el proceso. Leer desde archivos de texto Así como abrimos archivos y podemos escribir en ellos, también existe la posibilidad de leer desde ellos, para lo cual utilizaremos readline, y readall. Como se puede imaginar, con readline iremos leyendo una a una las líneas del archivo (cada vez que pongamos readline leeremos solo una), con este, leemos una línea, y el puntero se situa al final de la línea, para que a la próxima ejecución de esta función, sea la línea siguiente la que sea leída. Con readall en cambio, leeremos el total de archivo. Existe además una función llamada skipline, con la cual saltaremos la lectura de una línea. Ejemplo: Código Set objfso = createobject("scripting.filesystemobject") Set archivotexto = objfso.opentextfile("C:archivo.txt",1) 'abrimos el archivo msgbox archivotexto.readline 'leemos una linea, la primera archivotexto.skipline 'saltamos una linea msgbox archivotexto.readline 'leemos una linea, la tercera archivotexto.close 'cerramos el archivo Atributos de archivos y carpetas A continuación explicaré el método mediante el cual, se puede obtener, o bien cambiar, los atribuos
  • 10. de archivos y carpetas (es prácticamente igual para ambas cosas) Obtener atributos Set variable = objfso.getfile(ruta) variable.attributes Ejemplo: Código Set objfso = createobject("scripting.filesystemobject") Set archivo = objfso.getfile("C:tutorial.pdf") 'obtenemos el control sobre el archivo pdf Msgbox archivo.attributes 'mensaje con los attributos del archivo En este ejemplo vemos que luego de declarar el objeto, lo que hacemos es obtener el control del el archivo tutorial.pdf, para lo cual utilizamos getfile, y asignamos el archivo a la variable archivo. Luego, y ya con el archivo en la variable, podemos utilizarlo directamente para mostrar sus atributos, que no será más que un número que englobará todas las constantes de los atributos. Las constantes que hacen referencia a los atributos de archivo son: Valor Atributo 0 Normal 1 Solo Lectura 2 Oculto 4 Sistema 8 Letra de disco 16 Carpeta/directorio 32 Archivo 64 Link o acceso directo 128 Comprimido Como comentaba antes, attributes devolverá un valor único que será la sumatoria de cada uno de los valores para cada atributo del archivo. Como ejemplo: Un archivo que tenga atributos de; solo lectura, oculto, de sistema, y de archivo, tendrá un valor de 1+2+4+32= 39 Cambiar atributos Set variable = objfso.getfile(ruta) variable.attributes = sumaatributos Ejemplo: Código Set objfso = createobject("scripting.filesystemobject") Set archivo = objfso.getfile("C:tutorial.pdf") 'obtenemos el control sobre el archivo pdf archivo.attributes = 34 'attributo dearchivo y oculto El cambiar atributos consiste simplemente en asignar un valor a attributes.
  • 11. En el ejemplo anterior he puesto como valor 34 que representa atributos de archivo y oculto. Propiedades de archivos y carpetas Así como podemos obtener y modificar los atributos de los archivos y carpetas, podemos acceder a determinadas propiedades de los mismos, entre ellas: • Nombre; name • Nombre corto; shortname • Tamaño; Size • Ruta completa; path • Ruta corta; shortpath • Fecha de creación/modificación/último acceso; datecreated, datelastmodified, datelastaccessed • Tipo de archivo; type • Carpeta contenedora; parentfolder Estas son las principales propiedades a las que podemos acceder, lo cual se hará de la siguiente forma: Set variable = objfso.getfile(ruta) Msgbox variable.propiedad Ejemplo: Código Set objfso = createobject("scripting.filesystemobject") Set archivo = objfso.getfile("C:tutorial.pdf") 'obtenemos el control sobre el archivo pdf Msgbox archivo.size 'tamano del archivo en bytes Para obtener otras propiedades, simplemente sería cuestión de cambiar "size" por alguna de las otras propiedades a las que tenemos acceso (les recomiendo probar con cada una para ver los resultados), y de igual manera, se haría con carpetas en lugar de archivos, para lo que solamente tendríamos que cambiar getfile, por getfolder. Listar subcarpetas Con listar subcarpetas, nos referimos a, acceder a la colección de subcarpetas de una carpeta "X", para trabajar con cada una de ellas de manera independiente. Cuando hablamos de colección, hacemos referencia a un array, en el que están todos los elementos contenidos en un determinado "listado". Set variable = objfso.getfolder(ruta) Set subvariable = variable.subfolders Ejemplo: Código Set objfso = createobject("scripting.filesystemobject") Set micarpeta = objfso.getfolder("C:Carpeta") 'obtenemos el control sobre la carpeta Set subcarpetas = micarpeta.subfolders 'obtenemos la coleccion de subcarpetas For each s in subcarpetas 'por cada carpeta(s) en
  • 12. la coleccion(subcarpetas) Msgbox s.name 'mensaje con el nombre Next 'pasamos a la siguiente subcarpeta Bueno, como se ve en este caso, el acceder a las subcarpetas no es totalmente directo, sino que, en un principio, obtenemos la colección (array) de carpetas, para luego trabajar con cada una de ellas por medio de un for que recorre toda la colección. Al listar subcarpetas, se debe de terner en cuenta además, que la colección, solamente contiene, las carpetas del primer nivel, y no las que se encuentran en los niveles consiguientes, para que quede más claro: C:carpeta C:carpetanivel1 C:carpetanivel1nivel2 Si listamos la colección de subcarpetas en la carpeta "C:carpeta", obtendremos todas las del nivel 1, pero no las del nivel 2, para eso, deberíamos de implementar otro for que haga referencia a estas. Listar discos/particiones Al igual que para listar subcarpetas, para listar discos y particiones lo haremos a traves de una colección, por lo que en realidad, será muy similar al punto anterior. Set variable = objfso.getfolder(ruta) Set discos = variable.drives Ejemplo: Código Set objfso = createobject("scripting.filesystemobject") Set discos = objfso.drives 'obtenemos la coleccion de discos For each d in discos 'por cada disco(d) en la coleccion(discos) Msgbox d.driveletter 'mensaje con la letra de disco Next 'pasamos al siguiente disco Como ya se había dicho, el método de listar los discos y particiones, es el mismo que para obtener las subcarpetas de una carpeta, por lo que no debería de presentar ningún problema el hacerlo. También aclarar, que en el anterior ejemplo, solo he incluído una propiedad que no se había visto anteriormente, y esta es la de driveletter, y que como ya se habrán dado cuenta, hace referencia a la letra que tiene asignado el disco o partición en el sitema, por lo que una vez mencionado esto, pasaremos justamente, a identificar, cuales son las propiedades de disco a las que tendremos acceso. Propiedades de disco Como hemos visto en el anterior punto, a traves del objecto FSO es posible acceder a la colección de discos, así como a sus propiedades, siendo estas propiedades, las siguientes:
  • 13. Letra; driveletter • Nombre del disco; volumename • Espacio disponible; availablespace • Espacio libre; freespace • Espacio total; totalsize • Disponibilidad; isready • Ruta; path • Sistema de ficheros (NTFS, FAT, CDFS); filesystem • Carpeta principal; rootfolder • Número de serie; serialnumber • Nombre compartido; sharename • Tipo de disco; drivetype Ejemplo, no pondré en este caso, ya que es sería igual al que he puesto anteriormente. Por otra parte, solamente profundizaré en una de las propiedades de los discos (creo que las otras son facilmente identificables), y es justamente, la última que he enumerado, drivetype. El tipo de disco de un disco (valga la redundancia), puede estar entre los siguientes: Valor Tipo 0 Unknown/Desconocido 1 Removable/Removible 2 Fixed/Rígido 3 Network/Red 4 CD-Rom 5 RAM Disk También he de acotar, que la disquetera (Unidad A), es reconocida como disco extraíble, así como también ocurre, con las unidades virtuales, ej; aquellas carpetas montadas con el comando SUBST de ms-dos. Rutas de carpetas Por último, pero no menos importante, debo de comentar que el objecto FSO, permite obtener la ruta de tres de las carpetas más importantes del sistema, como lo son: • Windows (0) • System32 (1) • Temp (2) Para acceder a ellas, haremos uso de la función getspecialfolder. Set variable = objfso.getspecialfolder(constante) Ejemplo: Código Set objfso = createobject("scripting.filesystemobject") Set micarpeta = objfso.getspecialfolder(0) 'obtenemos el control sobre la carpeta Msgbox micarpeta.path 'mensaje con la ruta de la carpeta Como se ve en ejemplo, en este caso, nos hacemos con el control de la carpeta de windows, y luego
  • 14. mostramos su ruta, para poder acceder a las carpetas, las constantes son las que he indicado en un entre parentesis en un principio, al nombrar las carpetas. Bueno, con esto hemos terminado con el objeto FSO, pasemos entonces al segundo y principal objeto, la shell. Shell (wscript.shell) A través de este objeto podemos entre otras cosas: • Mostrar mensajes temporizados • Leer, borrar, y escribir en el registro de windows • Ejecutar aplicaciones (dos métodos) • Obtener el foco de una ventana • Enviar pulsaciones de teclado • Acceder multiples carpetas de sistema • Obtener variables del sistema • Crear accesos directos Mostrar mensajes temporizados Esta es la menos importante de todas las funciones de este objeto, pero no deja de ser útil en algunas ocasiones, sobre todo, si no queremos que un proceso se bloquee, solo por intentar mostrar un mensaje. Para que quede más claro, a lo largo de todos los ejemplo que he puesto, he ido mostrando determinados mensajes a traves de la función de msgbox (opción básica). Los mensajes generados con dicha función, no salen de pantalla, hasta bien el usuario, no da click en el/los botones que tiene el cuadro de mensaje, por lo que en caso de utilizar un mensaje de este tipo, la ejecución de nuestro script, se parará hasta bien este no salga de pantalla. Pero en lugar de utilizar este tipo de mensaje, podemos hacer uso de una mensaje popup, la cual desaparecerá sola al cabo del tiempo que hayamos especificado, luego de lo cual, continuará la ejecución del script. Modo en el que se emplea esta ventana: Variablemensaje = variable.popup(texto, tsegundos, título, botones) Ejemplo: Código Set objshell = createobject("Wscript.shell") rmensaje = objshell.popup("Este es un mensaje de prueba",3,"Mensaje Popup",64) El resultado; Para empezar, se puede apreciar que el objeto shell, se declara con Wscript.shell, y bueno, lo referente al mensaje, creo que una imagen dice más que mil palabras, hemos mostrado un mensaje en pantalla, el cual al cabo de 3 segundos, desaparecera y dará paso al resto de nuestro script. Si se ha mirado detenidamente, se notará que para los "botones" he puesto el valor 64, este valor, hace referencia a la sumatoria de los botones e iconos que aparecen en la ventana de mensaje, siendo los mismos: Botones:
  • 15. Valor Descripción 0 OK 1 OK y Cancelar 2 Abortar, Reintentar e Ignorar 3 Si, No y Cancelar 4 Si y No 5 Reintentar y Cancelar Iconos Valor Descripción 16 Parar/Error 32 Pregunta 48 Exclamación 64 Información En el caso de mi mensaje, el 64 corresponde a la suma del botón de ok (cero) y el icono de información (64) Si quisieramos mostrar un mensaje de Si, No y Cancelar, con un icono de pregunta, deberíamos de poner como valor el número 35 (3+32). Por otro lado, también vemos en el ejemplo como el popup, se guarda en una variable de nombre rmensaje. En dicha variable, se guarda el valor de la respuesta dada al mensaje, es decir, para el caso de un mensaje con los botones de Si, No y Cancelar, la variable rmensaje guardaría el valor de cual de esos botones fue presionado por el usuario, siendo estas las posibilidades: Valor Descripción 1 OK 2 Cancelar 3 Abortar 4 Reintentar 5 Ignorar 6 Si 7 No Es decir, que en caso de que la persona presione Si, el resultado obtenido será 6, esto puede servirnos de mucho si queremos darle un poco de interactividad a nuestros scripts y tomar diferentes caminos en virtud de las respuestas de los usuarios, lo cual puede ser utilizado junto a las funciones de msgbox (para esta también valen los botones e iconos) e inputbox, aunque a pesar de la mención las veremos en detalle, ya que no dependen de ningún objeto, y son de fácil comprensión. Leer, borrar y modificar el registro de windows Sin lugar a dudas, es una de las funciones más atractivas de este objeto, y su implementación no implica ninguna dificultad, y aún así, la implementación de esta función, no presenta ninguna dificultad. Leer valores
  • 16. variable.regread(llave de registro) Ejemplo: Código Set objshell = createobject("wscript.shell") Msgbox objshell.regread("HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerShell FoldersMy Pictures") 'va todo en una misma linea, la llave es muy larga Sencillo de entender, a través del objeto shell llamamos a la función regread, encargada de leer las llaves del registro, en este caso, he optado por una llave un tanto larga, pero que contiene la ruta de la carpeta de "mis imágenes", al igual que en otros ejemplos, muestro el valor por medio de un msgbox, pero como en todos los casos, es posible guardar este valor en una variable para luego trabajar con ella. Borrar valores variable.regdelete(llave de registro) Ejemplo: Código Set objshell = createobject("wscript.shell") objshell.regdelete("HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerShel l FoldersMy Pictures") Al igual que para leer, el borrar cadenas no tiene nada de especial, sino que simplemente debemos de llamar a la función regdelete para deshacernos de la cadena en cuestión. Escribir/modificar el registro Algo que de seguro le interesará a varios. variable.regwrite(llave de registro, valor, tipo de dato) Ejemplo: Código Set objshell = createobject("wscript.shell") objshell.regwrite("HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesSyste mDisableTaskMgr",1,"REG_DWORD") 'va todo en una misma linea, la llave es muy larga En este ejemplo, estaríamos modificando la llave del registro que deshabilita el administrador de tareas (taskmgr). Los datos que debemos de pasarle a esta función son; la llave a modificar/crear claro esta, el valor que le daremos, en mi ejemplo ha sido 1, y el tipo de datos que estamos ingresando. Como muchos sabrán, el registro de windows soporta ciertos tipos de datos en las diferentes claves de las que hace uso, a saber:
  • 17. Tipo Descripción REG_SZ Cadena REG_DWORD Numérico REG_BINARY Binario REG_EXPAND_SZ Una cadena expandible Existe un quinto tipo de datos, el REG_MULTI_SZ, pero no es soportado por esta función. Tener en cuenta que regwrite puede tener problemas con cadenas demasiado largas, y considerar también, que tal como he puesto en el título, regwrite creará una llave en caso de no existir, y la modificará en caso de que ya esté presente. También he de recomendar que en caso de trabajar con el registro se ha de tener mucho cuidado, y que quererse dejar el code más legible, se utilicen las siguientes abreviaciones (lo he hecho en mi ejemplo): Llave principal Abreviación HKEY_CURRENT_USER HKCU HKEY_LOCAL_MACHINE HKLM HKEY_CLASSES_ROOT HKCR HKEY_USERS HKEY_USERS HKEY_CURRENT_CONFIG HKEY_CURRENT_CONFIG Ejecutar aplicaciones Como he comentado antes, a traves de este objeto existen dos métodos diferentes de ejecutar aplicaciones, los cuales además, tendrán diferentes opciones y resultados. Método Run Este es el más simple y usado de los dos métodos. variable.run rutaprograma, estadoventana, espera Ejemplo: Código Set objshell = createobject("wscript.shell") Objshell.run "notepad", 1, true En este caso ejecutamos el bloc de notas, en modo normal, y establecemos, que el script se pause (true) hasta que se cierre la aplicación (notepad). Los estados en los que se puede abrir la ventana, van del 0 al 10, pasando por oculto, maximizado y minimizado, entre otros, pero pasaré de explicar cada uno de ellos ya que resulta mejor opción probar y ver el resultado, que lo que podría ser la explicación. Lo que si cabe destacar, es el estado 0 (cero) o vbhide, que ejecuta una aplicación en modo oculto, sin mostrar ningún tipo de ventana. Probar por ejemplo sustituyendo el número 1 por vbhide en el ejemplo que he dejado, para ver (en realidad no se verá nada) como se ejecuta el notepad sin mostrar ninguna ventana (si se verá el proceso en el administrador de tareas). Tener en cuenta además, que el estado de la ventana, y la espera del programa, son totalmente opcionales , así que con poner simplemente objshell.run "notepad" hubiese alcanzado. Método Exec
  • 18. Este método es muy similar al anterior, solamente que nos permite un mayor control sobre la aplicación que estamos corriendo, con la excepción de que no nos permite seleccionar estado de la ventana. variable.exec(rutaprograma) Ejemplo: Código Set objshell = createobject("wscript.shell") Objshell.Exec("notepad") Como vemos, el método en el que se ejecuta la aplicación es practicamente igual al anterior, solamente hemos sutituído run por exec y no hemos pasado ningún parámetro a la función, pero ahora veamos que es lo que o hace diferente del otro método. • Status • ProcessID • Terminate • Stdin, Stdout, Stderr Estas serían las funciones que diferencian el exec del run, todas estas se aplican sobre la aplicación/ comando que estamos ejcutando, por lo que, para hacer uso de esta funcionalidad, es necesario ejecutar la aplicación, y asignar la misma a una variable para luego trabajar a traves de esta. Veamos esto, junto a la explicación de status y processid El status identifica el estado de la aplicación ejecutada, 0 (cero) representa una aplicación en ejecución, y 1 (uno), indentifica que la aplicación fue cerrada y su proceso ya no se encuentra presente. Con respecto al processid, creo que salta a la vista la función del mismo, no es más que el identificador de proceso (PID). Ejemplo: Código Set objshell = createobject("wscript.shell") Set bloc = Objshell.Exec("notepad") Msgbox bloc.status Msgbox bloc.processid En este ejemplo, ejecutamos el bloc de notas, asignando su proceso a la variable "bloc", y luego mostramos dos mensajes, uno con el status (debería de ser 0), y otro con el número de proceso. La función status nos servirá en definitiva, para poder monitorear nuestro proceso, y realizar una determinada acción en función de si permanece abierto, o bien, lo han cerrado. Ejemplo: Código Set objshell = createobject("wscript.shell") Set bloc = objshell.Exec("notepad") Do while bloc.status = 0 Wscript.sleep 200 'sirve para hacer una pausa de x milesimas de segundo loop msgbox "Se ha cerrado el bloc de notas"
  • 19. Pasemos entonces a terminate Esta función, permite terminar el proceso que habíamos iniciado, por lo que por su nombre era fácil predecirlo Ejemplo: Código Set objshell = createobject("wscript.shell") Set bloc = objshell.Exec("notepad") Wscript.sleep 5000 'Pausa de 5000 milesimas, o 5 segundos bloc.terminate Abrimos el bloc de notas, realizamos una espera de 5 segundos, y cerramos el bloc de notas, fácil. Pasando ahora a las últimas funciones de exec; stdin, stdout, stderr, debo de aclarar que estas funciones pueden ser utiles a la hora de trabajar en línea de comandos, pero dado que en línea de comandos hay mejores maneras (a mi criterio) de hacerlo, obviaré la explicación de dos de estas funciones, y solo le daré importancia a stdout que si puede facilitarnos la tarea en la ejecución de comandos de ms-dos. Stdout nos muestra la salida de un los comandos ejecutados a traves de exec, y para que se entienda mejor, pasare directamente a un.. Ejemplo: Código Set objshell = createobject("wscript.shell") Set ping = objshell.exec("cmd /c ping www.google.com") Msgbox ping.stdout.readall El resultado: En este ejemplo, hemos ejecutado un ping a google a traves del cmd, y luego por medio de stdout y su readall hemos leído el contenido completo de la salida del comando y lo hemos mostrado en un msgbox. También, en lugar de readall podemos utilizar read(x), donde x es el número de caracteres que queremos leer. En un ejemplo un poco mas "elaborado", haremos lo mismo que antes, pero esta vez haciendo uso de read, leeyendo el texto completo, pero carácter a carácter. Código Set objshell = createobject("wscript.shell") Set ping = objshell.exec("cmd /c ping www.google.com") do if not ping.stdout.atendofstream then respuesta = resultado & ping.stdout.read(1) else exit do end if
  • 20. loop msgbox respuesta Este ejemplo, es un poco más dificil de explicar, así como también lo es entender, por lo que quien quiera entenderlo deberá prestar atención y visualizarlo detenidamente. En resumen, ejecutamos el ping a google, y luego nos metemos en un bucle infinito (do), dentro de este, un análisis condicional, si no se alcanza el final de la salida (stdout.atendofstream), la variable respuesta, es igual a la propia variable y un carácter (concatenamos). Ese analisis se continuará haciendo hasta que se alcance el final de la lectura, es ahí donde entonces, pasamos al else, y el else dice que, se sale del bucle do (exit do). Por lo que en definitiva, el if se ejecutará una y otra vez, e ira guardando en la variable (respuesta) letra por letra hasta formar el mensaje completo, cuando se llegue al final, se saldrá del bucle, y se mostrara el msgbox con la "respuesta". Un poco más complicado, pero espero se entienda la idea de este ejemplo. Obtener el foco de una ventana Variable.appactivate tituloventana Ejemplo. Código Set objshell = createobject("wscript.shell") Objshell.appactivate "Sin titulo" Con esto, obtendríamos el foco de una ventana con por ejemplo, el título "Sin título – Bloc de notas", que como se habrán dado cuenta, es el título que tiene un nuevo bloc de notas. Las consideraciones que debemos de tener en cuenta al utilizar esta función, son las referentes al orden en el que realiza las comparaciones en busca de nuestra ventana; • Primero busca la ventana que tiene el título exacto que hemos establecido • Si no encuentra el título exacto, busca aquella ventana que coincida en el principio del título • Si no encuentra ni el título exacto, ni tampoco encuentra título que comience como el nuestro, entonces busca aquel que termina como el que queremos. • También, en el caso de haber varias ventanas con el mismo nombre, elegira una cualquiera al azar, y le dará el foco. Enviar pulsaciones del teclado Otra de las funciones llamativas de este objeto, es la función sendkeys que nos permitirá enviar pulsaciones de teclado, como si estuviesemos escribiendo, así que hay que tener cuidado con el uso que se da, ya que una vez ejecutada, enviará las pulsaciones a la ventana activa, por lo que si no es lo que deseabamos, podemos terminar presionando un montón de teclas en un programa x, con los resultados que ello puede acarrear. Variable.sendkeys teclas Ejemplo: Código Set objshell = createobject("wscript.shell") Objshell.sendkeys "Estas son las teclas"
  • 21. Este es un ejemplo muy simple ,que además no recomiendo probar, ya que como he dicho antes, enviará las pulsaciones de las teclas a la ventana activa, y los resultados pueden no "gustarnos". Es por eso que a continuación muestro un ejemplo más claro de esta función, haciendo uso además, de funciones que hemos visto anteriormente. Código Set objshell = createobject("wscript.shell") Set bloc = objshell.exec("notepad") 'ejecutamos el bloc de notas Wscript.sleep 2000 'espera de dos segundos Objshell.appactivate bloc.processid 'ponemos el foco en la ventana del bloc Wscript.sleep 200 'espera de milesimas Objshell.sendkeys "Tutorial vbs" 'enviamos un mensaje con sendkeys Objshell.sendkeys "{ENTER}" 'luego del mensaje anterior, un ENTER Wscript.sleep 2000 'nueva espera de dos segundos Objshell.sendkeys "Probando la funcion sendkeys" 'enviamos una segunda linea de mensaje Como había dicho, en este ejemplo he hecho uso de algunas otras fuciones vistas anteriormente. Para empezar he optado por ejecutar el bloc de notas a traves de la función exec, podría optarse por run, pero este ejemplo me servía para mostrarles el uso que puede hacerse del processid. Como vemos, a la hora de obtener el foco de la ventana con appactivate, he puesto como "título" el processid, ya que vbs nos permite hacer uso conjunto de estas dos funciones, para de este modo asegurarnos de que el foco se ponga en la ventana que corresonde y no en otra con similar nombre. Al igual que antes, podríamos poner simplemente el nombre de la ventana del bloc de notas en lugar de processid, pero igualmente creo no quedarán dudas de por que el uso de esta. Luego, con respecto al envío de las teclas, no creo que merezca explicación alguna, ya que es simplemente el mensaje/pulsación que queremos envíar. Igualmente habrán visto en medio del envío de teclas que también esta presente una tecla especial, el {ENTER}, es por eso que dejo a continuación, la tabla con el listado de argumentos para estas teclas: Tecla Argumento BACKSPACE {BACKSPACE}, {BS}, or {BKSP} BREAK {BREAK} CAPS LOCK {CAPSLOCK} DEL or DELETE {DELETE} or {DEL} DOWN ARROW {DOWN} END {END} ENTER {ENTER} or ~ ESC {ESC} HELP {HELP} HOME {HOME} INS or INSERT {INSERT} or {INS} LEFT ARROW {LEFT} NUM LOCK {NUMLOCK} PAGE DOWN {PGDN} PAGE UP {PGUP}
  • 22. PRINT SCREEN {PRTSC} RIGHT ARROW {RIGHT} SCROLL LOCK {SCROLLLOCK} TAB {TAB} UP ARROW {UP} F1 {F1} F2 {F2} Fx {Fx} Para el caso de las teclas SHIFT, CTRL y ALT, los argumentos con +, ^ y % respectivamente, no siendo posible utilizar, la tecla PRTSC, o lo que es igual, la tecla de PRINT (la que se utiliza para capturar pantalla). Para utilizar estas tres letras; Objshell.sendkeys "+A" Objshell.sendkeys "^V" Objshell.sendkeys "%{TAB}" Carpetas "especiales" Con carpetas especiales me refiero a aquellas carpetas como "Inicio", "Enviar a" y "Favoritos" entre otras. Para eso, haremos uso de la función specialfolders Variable.specialfolders(carpeta) Ejemplo: Código Set objshell = createobject("wscript.shell") Msgbox objshell.specialfolders("Desktop") Con lo que obtendríamos un msgbox, con la ruta del escritorio, algo como "C:Documents and SettingsNovluckerEscritorio", de igual modo y como he mencionado antes, podemos acceder a las rutas de otras carpetas, para lo que, contamos con la siguiente tabla. Carpeta Identificador Escritorio AllUsersDesktop Menú Inicio AllUsersStartMenu Programas AllUsersPrograms Inicio AllUsersStartup Escritorio Desktop Favoritos Favorites Fuentes Fonts Mis documentos MyDocuments Entorno de red NetHood Impresoras PrintHood Programas Programs Reciente Recent Enviar a SendTo Menú Inicio StartMenu Inicio Startup Plantillas Templates Con esta tabla, solo bastaría cambiar "desktop" en nuestro ejemplo, para ver las rutas de otras de las
  • 23. carpetas disponibles, y nótese también que si bien, algunas carpetas parecen estar repetidas, algunos identificadores hacen referencia a las carpetas de todos los usuarios, y otras a la del usuario activo. Obtener variables de sistema Bueno, habrán visto entonces, que a pesar de la cantidad de carpetas de las que se puede obtener la ruta, hay algunas muy interesantes que no aparecen con el specialfolders, como ser "Archivos de programa", la carpeta de usuario, etc. , es por eso que entonces, haremos uso de la función expandenvironmentstrings. Este función, y como se ha adelantado en el título, permite acceder a todas las variables del sistema, como ser, USERNAME, USERPROFILE, COMPUTERNAME, y todas aquellas que aparecen a través del comando SET de ms-dos. Variable.expandenvironmentstrings(%variablesistema%) Ejemplo: Código Set objshell = createobject("wscript.shell") Msgbox objshell.expandenvironmentstrings("%Programfiles%") Como es de esperarse, en este caso, nos aparecerá un mensaje con la ruta de la carpeta de "Archivos de programa". Crear accesos directos Bueno, luego de haber visto ya, varias funciones, solo queda por ver, la de createshortcut, la cual permite crear accesos directos a cualquier aplicación/archivo, quizás parezca una función un poco "insulsa", pero quizás alguien quiera por ejemplo, agregar un acceso directo en la carpeta de Inicio, y será aquí cuando recurramos a esta función. En esta función es necesario definir varios valores, así que en lugar de explicarla, pasaré directamente a un ejemplo: Código Set objshell = createobject("wscript.shell") Set ellink = objshell.createshortcut("C:Acceso directo.lnk") 'creamos el link Ellink.targetpath = "C:windowsnotepad.exe" 'completamos los valores Ellink.windowstyle = 1 Ellink.hotkey = "CTRL+SHIFT+N" Ellink.iconlocation = "C:windowsnotepad.exe,0" Ellink.description = "Acceso directo a notepad" Ellink.workingdirectory ="C:" Ellink.save 'guardamos el link Creo que este ejemplo alcanza para entender sin problemas esta función, no hacemos más que crear el link, completamos todos los datos que lleva el link, y salvamos. Los campos a completar son los que aparecen en cualquier link (imagen adjunta), teniendo en cuenta demás que no todos son indispensables.
  • 24. Falta agregar, que pueden crearse links a páginas web’s del siguiente modo. Ejemplo: Código Set objshell = createobject("wscript.shell") Set weburl = objshell.createshortcut("C:google.url") Weburl.targetpath = http://www.google.com Weburl.save Simplemente hemos cambiado la extensión del link a url, en lugar de lnk como tenía antes, y la ruta del link pasa a ser la dirección de la web a la que queremos acceder. Bueno, así termina la segunda parte de este tutorial, en donde he intentado mostrar a quienes no tienen conocimientos, los dos principales objetos de la "librería" de vbs, espero se haya entendido , y como he dado a entender en mi primer mensaje, la idea es ir agregando nuevo objetos, seguramente no agregaré más post, pero si agregaré y colgaré en el "temario" enlaces para descarga de pdf Saludos Continuará....