Anuncios

Bienvenidos sean a este post, en el post anterior hemos comenzado a hablar sobre el objeto que nos permite acceder al disco del equipo, tambien nos centramos en ver como podemos obtener datos del disco y como manipular las carpetas del mismo, hoy nos centraremos mas en los temas faltantes sobre este objeto entre ellos la creacion de archivos ASCII en nuestros disco.

Anuncios

Para ello seguiremos usando al objeto Folder pero en este caso usaremos el metodo CreateTextFile su sintaxis es la siguiente:

objFolder.CreateTextFile nombreArchivo[, booleano][, booleano]
Anuncios

En este caso el atributo nombreArchivo debe estar siempre de lo contrario devolvera un error, los dos siguientes atributos opcionales de tipo booleano, el primero indicara si debe sobreescribir (true) o no (false), y el segundo tambien de tipo booleano si se guardara en formato ASCII (false) o en formato UNICODE (true), si se omiten estos datos se usaran los valores false de forma predeterminada, si se lo estan preguntando existe un objeto File que representa a un archivo generico y nos permite trabajar sobre cualquier archivo del sistema y obtener su informacion, pero en Folders tambien tenemos un objeto llamado Files que hace referencia a la coleccion de contenidos en una carpeta que representada por este objeto, asi como de la misma lo hace Folders con respecto a Drive, este objeto llamado File contiene las mismas propiedades y metodos que los de Folder pero con la excepcion de la coleccion SubFolder porque obviamente no aplican a un archivo, veamos a continuacion un simple objeto para listar los contenidos de una carpeta, para ello modificaremos el ejemplo de dirs.vbs de la sigueinte manera:

dim objfso
dim archivo
dim texto

set objfso = CreateObject("Scripting.FileSystemObject")

for each archivo in objFso.drives("c").rootfolder.subfolders("prueba").files
	texto = texto & archivo.name & vbTab
	texto = texto & archivo.size & vbTab
	texto = texto & archivo.type & vbCrLf
next

wscript.echo texto
Anuncios

En este caso crearemos tres variables, crearemos el objeto que nos permitira acceder al sistema de archivos, luego usaremos un bucle for each donde usaremos una de las tres variables (archivo) para almacenar la coleccion obtenida del objeto objfso y ahi especificaremos primero la unidad (por medio de Drive), luego le diremos que pase al rootfolder, despues usamos subfolders y le indicamos que use prueba, si el directorio del post anterior, y por ultimo la coleccion files, en el cuerpo del bucle iremos llenando a la variable texto primero con el nombre del archivo, luego el tamaño y por ultimo el type el cual nos indicara que tipo de archivo es en base a su extension, en este caso separamos los dos primeros con un tab y luego lo cerramos con la nueva linea, por ultimo mostraremos el resultado final, veamos como es la salida:

C:\>cscript c:\Users\mirandma\Desktop\dirs.vbs
Microsoft (R) Windows Script Host versión 5.812
Copyright (C) Microsoft Corporation. Reservados todos los derechos.

prueba.txt      25      Documento de texto
test.txt        14      Documento de texto
twain_32.dll    64512   Extensión de la aplicación
write.exe       11264   Aplicación

C:\>
Anuncios

En este caso podemos ver como nos devolvio los tres datos que le solicitamos, hasta ahora hemos visto como trabajar con el objeto File y este nos devuelve el tipo TextStream, este tipo a su vez nos permite manipular los archivos tanto para lectura como escritura con los siguientes metodos:

  • Read, lee la cantidad de caracteres especificados desde la posicion actual del puntero.
  • ReadLine, lee desde la posicion actual hasta el final de la linea
  • ReadAll, lee todo el contenido de un archivo
  • Write, Escribe el texto pasado como argumento desde su posicion actual
  • WriteLine, igual al anterior pero agrega un caracter de nueva linea al final de la misma
  • WriteBlankLines, agrega tantos caracteres de nueva linea como se le pasen como argumento
  • Skip, esquiva los caracteres pasados como argumentos desde la posicion actual
  • SkipLine, ignorara la linea hasta el siguiente cambio de linea
  • Close, cierra el objeto TextStream y se usa para liberar el objeto para que no pueda seguir siendo escrito
Anuncios

Ahora pasemos a las propiedades de este objeto:

  • Column, devuelve la posicion dentro de la fila actual siempre comienza desde la posicion 1
  • Line, indica la posicion de la linea actual su valor inicial es de 1
  • AtEndOfLine, nos devuelve un valor booleano indicando si se encuentra al final de la linea
  • AtEndOfStream, tambien devuelve un valor booleano pero indicando si estamos al final del archivo abierto como lectura
Anuncios

Vamos a hacer un ejemplo para entender mejor el concepto de los archivos:

file.vbs

dim objfso
dim nombre
dim archivo
dim texto

set objfso = CreateObject("Scripting.FileSystemObject")

nombre = inputbox("Ingresa un nombre para el archivo")
set archivo = objfso.createtextfile(nombre)
texto = inputbox("Ingresa un texto para el archivo")
archivo.writeline texto
archivo.close

set archivo = objfso.opentextfile(nombre)
texto = archivo.readall
msgbox texto,64,"Contenido del archivo " & nombre
archivo.close
Anuncios

Este es un ejemplo simple y poco practico para demostrar como se utiliza la escritura y la lectura de los archivos, primero crearemos una serie de variables que utilizaremos en el codigo, despues iniciaremos al objeto para poder al disco y luego tendremos el primer bloque que creara un archivo:

nombre = inputbox("Ingresa un nombre para el archivo")
set archivo = objfso.createtextfile(nombre)
texto = inputbox("Ingresa un texto para el archivo")
archivo.writeline texto
archivo.close
Anuncios

En este caso pediremos que ingresen el nombre del archivo donde almacenaremos informacion, nuestro siguiente paso sera crear el archivo y para ello usaremos a createtextfile y le pasaremos el valor en nombre, nuestro siguiente paso sera ingresar un texto que se almacenara en la variable texto, luego procederemos a escribir este texto en el archivo, una vez hecho procedemos a cerrar el archivo, con esto concluimos la creacion de un archivo y le ingresamos un texto, pasemos al siguiente bloque:

set archivo = objfso.opentextfile(nombre)
texto = archivo.readall
msgbox texto,64,"Contenido del archivo " & nombre
archivo.close
Anuncios

En este caso volvemos a usar a archivo pero en este caso usaremos a opentextfile donde le enviaremos el archivo almacenado en nombre, nuestro siguiente paso sera almacenar en texto todo el contenido del archivo por medio de readall, en este caso lo podemos hacer tranquilo porque el archivo es chico y no bloqueara al equipo pero en archivos grandes tengan cuidado de usar este metodo, nuestro siguiente paso sera mostrar el contenido almacenado en texto, y finalmente cerramos el archivo, si lo probamos trabajara de la siguiente forma

Como pueden ver ingresamos primero el archivo, este lo creo al lado del script y luego nos pidio un texto y por ultimo por medio de un msgbox lo mostramos en pantalla.

Anuncios

Antes de finalizar veremos las funciones disponibles para FileSystemObject:

  • GetDrive(unidad), devuelve una referencia al objeto Drive a la unidad informada por argumento
  • GetFolder(carpeta), devuelve una referencia al objeto Folder en base a la carpeta informada por argumento
  • GetFile(archivo), devuelve una referencia al objeto File en base al archivo informada como argumento
  • GetSpecialFolder(valor), devuelve una referencia al objeto Folder tambien pero solamente a las carpetas especiales de Windows, veamos la siguiente tabla
ConstanteValorDescripcion
WindowsFolder0La carpeta de Windows
SystemFolder1La carpeta System de Wndows
TemporaryFolder2La carpeta de archivos temporales
Anuncios
  • GetTempName, proporciona una cadena de texto que sera un nombre para un archivo temporal unico en el sistema
  • GetDriveName(ruta), devuelve una cadena con el nombre de la unidad
  • GetFileName(archivo), extrae el nombre del archivo de una cadena con una ruta pasada como argumento
  • GetBaseName(archivo), idem al anterior pero devuelve el nombre sin extension
  • GetExtensionName(archivo), idem a los anteriores pero solo devuelve la extension
  • BuildPath(ruta, archivo), construye una ruta valida en base a la ruta y al archivo informado en los argumentos
  • DriveExists(unidad), devuelve un booleano si la unidad informada existe o no
  • FolderExists(carpeta), idem al anterior pero orientado a carpetas
  • FileExists(archivo), idem a los anteriores pero orientado a archivos
  • CreateFolder(nombre), crea un directorio con el nombre especificado
  • DeleteFolder(ruta), borra el directorio informado en ruta, si se usa junto al asterisco (*) borra los directorios internos
  • CopyFolder(origen, destino, booleano), copia la carpeta informada en origen a la carpeta informada en destino y el booleano es para indicar si sobreescribe o no
  • MoveFolder(origen, destino, booleano), idem al anterior pero en lugar de copiar mueve la carpeta origen al destino
  • CreateFile(nombre), crea un archivo con el nombre especificado
  • DeleteFile(ruta), borra el archivo especificado en ruta pero tambien acepta el asterisco (*) como comodin
  • CopyFile(origen, destino, booleano), idem a CopyFolder pero con archivos, trabaja de la misma forma
  • MoveFile(origen, destino, booleano), idem al anterior pero en lugar de copiar mueve los archivos
  • CreateTextFile(nombre, booleano, booleano), crea un archivo de texto tipo ASCII, el unico parametro requerido es nombre, los otros dos son opcionales y el primero indica si puede sobreescribir o no, y el segundo indica si es ASCII o de UNICODE
  • OpenTextFile(nombre), devuelve un tipo TextStream y este nos permitira manejar los archivos de texto, tal como vimos en el ejemplo anterior.
Anuncios

En resumen, con esto completamos el visto general de como acceder al disco del equipo por medio de VBScript, en los tiempos que funcionaba en el Internet Explorer era de utilidad para ciertas practicas, por ejemplo por medio de un navegador obtener el tamaño del disco y esto era practico para una pagina de relevamiento, por ejemplo, en el caso de hoy hemos visto como crear nuestro propio archivo de texto, como ingresar informacion y como recuperarla, esto es ideal para cuando necesitamos llevar un log de nuestro codigo cuando trabajamos por ejemplo con el Active Directory pero no nos adelantemos, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes comprar mi libro sobre VBscript en Amazon

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00