Conceptos básicos de VBScript. VBScript
Continuación
Script de Visual Basic
¿Por qué necesita scripts de VBS?
El script VBS es una solución poderosa para automatizar las acciones del usuario en los sistemas Windows. Este tipo de secuencias de comandos se usa comúnmente para:
- creando escenarios complejos;
- usar objetos de otras aplicaciones y bibliotecas;
- ocultar ventanas durante la ejecución del script;
- cifrado de la lógica del script.
Básicamente, los scripts de VBS se utilizan para procesar datos, administrar el sistema, trabajar con cuentas de usuarios y computadoras, interactuar con aplicaciones de oficina, trabajar con bases de datos y otras tareas complejas.
Disposiciones Básicas
Dependiendo del lenguaje de la secuencia de comandos, el contenido y el cifrado, existen los siguientes tipos de secuencias de comandos:
- vbs: secuencia de comandos de Visual Basic
- vbe: secuencia de comandos de Visual Basic cifrada
- js - Java Script
- jse - Script Java cifrado
- wsh - configuración de la secuencia de comandos
- wsf: secuencia de comandos integrada en XML
En este artículo, miraré scripts como vbs.
Los scripts generalmente se editan en el Bloc de notas de Windows, pero recomiendo usar Notepad2, que resalta las palabras clave de Visual Basic y ayuda a formatear el cuerpo del script. Por lo tanto, un script vbs es un archivo de texto sin formato llamado * .VBS, que puede editarse fácilmente en el bloc de notas y ejecutarse haciendo doble clic o llamando por su nombre en la consola.
Como se describió anteriormente, los scripts no se compilan, sino que se interpretan. Es decir, para procesar un script, el sistema debe tener un intérprete del lenguaje VBS, e incluso hay dos intérpretes de este tipo en Windows: WScript con ventana y CScript de consola; ambos intérpretes son Windows Script Host (WSH).
De forma predeterminada, todos los scripts se ejecutan a través de WScript, es decir, no se requieren configuraciones, pero para ejecutar el script en la ventana de la consola, debe ejecutarlo a través de CScript o establecer CScript como el intérprete predeterminado. Para hacer esto, haga lo siguiente en la línea de comando:
CScript // H: CScript
Después de eso, todos los scripts se ejecutarán en modo consola. El regreso al modo de ventana se realiza con el siguiente comando:
CScript // H: WScript
Las siguientes reglas funcionan en Visual Basic:
- la longitud de la línea no está limitada;
- el caso no se considera;
- no se cuenta el número de espacios entre parámetros;
- la línea de comando puede romperse y el símbolo "_" debe insertarse en el lugar de la ruptura;
- la longitud máxima de un nombre de variable es de 255 caracteres;
- los comentarios se indican con un símbolo "" ".
"=== Encabezado de información del script ===" Nombre del script: "nombre del script;" Fecha: "fecha de modificación;" Autor: "autor;" Descripción: "descripción;" === Bloque de inicialización === Directiva "Opción explícita" , que prohíbe la creación automática de "variables; Oscuro
Variables
De forma predeterminada, las variables en los scripts se declaran automáticamente cuando se utilizan por primera vez en el cuerpo de un script, a menos que la directiva Option Explicit lo prohíba. Si declara la directiva Option Explicit al principio del script, entonces todas las variables deben definirse de antemano utilizando las siguientes construcciones:
Oscuro
Las constantes se declaran al principio del script usando la construcción:
Const
El tipo de variable se asigna automáticamente después de ingresar el primer valor en ella. Los siguientes tipos de datos existen en Visual Basic:
- vacío: variable no inicializada;
- nulo - variable vacía;
- booleano - tipo booleano, valores posibles: Falso, Verdadero o 0, 1;
- byte - entero sin signo de 8 bits, valores posibles: 0 .. 255;
- entero - entero de 32 bits, valores posibles: -32768 .. 32767;
- long - entero de 64 bits, valores posibles: -2147483648 .. 2147483647;
- moneda - tipo de moneda, valores posibles: -922337203685477.5808 a 922337203685477.5807;
- número de coma flotante simple, valores posibles: -3.402823e38 .. -1.401298e-45 para números negativos y 1.401298e-45 .. 3.402823e38 para números positivos;
- doble - número de coma flotante, valores posibles: 1.79769313486232e308 .. -4.94065645841247e-324 para números negativos y 4.94065645841247e-324 .. 1.79769313486232e308 para números positivos;
- fecha - fecha, valores posibles: 01.01.1900 y 31.01.9999;
- cadena - variable de cadena, capacidad hasta 2 mil millones de caracteres;
- objeto: un puntero a un objeto;
- error - código de error.
Los datos se pueden verificar para verificar el cumplimiento de los tipos, así como también traducirlos de un tipo a otro, si los valores lo permiten. Para operaciones sobre tipos de datos, se utilizan los siguientes comandos:
VarType (
Como se mencionó anteriormente, Visual Basic no impone restricciones estrictas sobre los nombres de las variables, pero al mismo tiempo, existen pautas para los nombres de las variables para que sea fácil determinar el tipo de datos en el texto del script. Para hacer esto, se recomienda poner símbolos condicionales delante del nombre de la variable que determinan el tipo de variable:
- iValueName: tipos numéricos
- sValueName es un tipo de cadena
- bValueName: tipo booleano
- dValueName - fecha
- oValueName - objeto
- cValueName - constante
- aArrayName: una matriz
Las matrices de variables se pueden utilizar en los scripts de VBS para almacenar listas, tablas e incluso construcciones más complejas. Las matrices unidimensionales (listas) pueden ser dinámicas, es decir, le permiten cambiar su dimensión en el transcurso del script. Todas las matrices se declaran con el comando Dim:
Oscuro
Un ejemplo de uso de matrices
Dim aMyArray1 (10,10) "crea una matriz estática con dimensiones 11x11; Dim aMyArray2 ()" crea una matriz dinámica; aMyArray1 (0,0) = "Hola" "llenando la matriz; aMyArray1 (0,1) =" Gente "" llenando la matriz; aMyArray1 (1,0) = "World" "llenando la matriz.
Antes de usar una matriz dinámica, debe especificar la dimensión actual con el comando ReDim, después de lo cual la matriz se puede reformar en cualquier lugar del script, mientras se borra toda la matriz o se conservan los valores de celda antiguos con el comando Preservar:
ReDim aMyArray2 (0) "formando una matriz a partir de un elemento; aMyArray2 (0) =" Hola "" llenando la matriz; ReDim aMyArray2 (1) "eliminando la matriz anterior y formando una nueva a partir de" otros elementos; aMyArray2 (0) = "Hola" "llenando la matriz; aMyArray2 (1) =" Mundo "" llenando la matriz; ReDim Preserve aMyArray2 (2) "formando un arreglo de tres elementos, dejando" los valores antiguos de los elementos en las celdas donde estaban; aMyArray2 (1) = "!" "llenando la matriz; Erase aMyArray2" eliminando la matriz.
Para averiguar la dimensión de una matriz, generalmente usan la función UBound, que se discutirá a continuación junto con otras funciones para trabajar con datos.
Ramificación condicional
Ni un solo escenario completo está completo sin ramificación, la ramificación le ayuda a elegir el camino correcto cuando se cumple o no alguna condición. En otras palabras, las bifurcaciones implementan la lógica de la secuencia de comandos. Se implementan varios mecanismos de ramificación en los scripts de VBS. Considérelos en orden.
Construya para una acción condicional:
Si
Construya para varias acciones condicionales:
Si
Construcción de horquilla:
Si
Construcción "bifurcación en varios caminos" (opción cIf):
Si
En todas las construcciones anteriores, se aplica la siguiente regla: "Si la condición
Construcción "bifurcación en varios caminos" (opción cSelect):
Seleccione el caso
En esta construcción, la regla funciona: "Si el valor de la variable
Ciclos
Para organizar acciones repetitivas o iterar sobre los elementos de una matriz, generalmente se utilizan bucles. En los scripts de VBS se organizan varios tipos de bucles: un bucle regular, un bucle con un número desconocido de iteraciones y un bucle condicional.
El ciclo habitual está organizado por la estructura For - Next, en cuyos argumentos parámetros como el nombre del contador (
Para
Si durante la operación del bucle es necesario detener la iteración sobre los valores, entonces esto se puede hacer usando el comando Salir para
Para
Un bucle con un número desconocido de iteraciones se usa generalmente para iterar sobre todos los valores en la colección de un objeto cuando se desconoce su dimensión. Esta estructura iterará sobre todos los valores (
Para cada
Para cada oCurrentFile en oFiles WScript.Echo oCurrentFile.Name Siguiente
Los bucles con condiciones se utilizan para procesar datos cuando se cumple una determinada condición. Dichos bucles son de dos tipos: con un control al comienzo del ciclo y con un control al final.
Haga un bucle mientras se cumple la condición, con una marca al principio
Hacer mientras
Haga un bucle hasta que se cumpla la condición, con una marca al principio
Hacer hasta
Como se mencionó anteriormente, las condiciones se pueden colocar al final del ciclo. En este caso, el cuerpo del bucle se ejecutará al menos una vez. Como en los bucles normales, un bucle condicional se puede interrumpir con el comando Exit Do:
Hacer
Funciones integradas
Para trabajar con datos y construir sus procedimientos y funciones, los desarrolladores de Visual Basic ya se han ocupado de la base de secuencias de comandos: las funciones básicas. Funciones de scripts VBS para trabajar con fechas, cadenas y números, así como procedimientos básicos de E / S y procedimientos para trabajar con la red. Echemos un vistazo rápido a las funciones integradas.
Funciones de manejo de fechas:
Fecha "devuelve la fecha actual; Hora" devuelve la hora actual; Ahora "devuelve la fecha y hora actuales; DateDiff (
Funciones de procesamiento de cadenas:
Asc (
Funciones matemáticas:
Randomize "inicializa el mecanismo de números aleatorios (no devuelve nada); Rnd" devuelve un valor aleatorio no entero entre 0 y 1; Atn (
Y, por supuesto, además de las funciones mencionadas, los scripts admiten todas las operaciones matemáticas y lógicas más simples:
- = - operador de asignación;
- + - la suma de dos números;
- - - resta de dos números;
- * - multiplicación de dos números;
- / - división de dos números;
- \ - división entera de dos números;
- Mod es el resto de dividir dos números;
- ^ - exponenciación;
- & - concatenación de dos cadenas;
- Es - comparación de dos objetos;
- Eqv - comparación de dos expresiones;
- Operación de negación no lógica;
- Y - operación de conjunción lógica;
- O - operación de disyunción lógica;
- Xor - operación de exclusión lógica;
- Imp es una operación de implicación lógica.
El orden de ejecución de las operaciones se determina como en todos los lenguajes de programación: primero, se realizan las operaciones entre paréntesis, luego se calculan las funciones, luego las operaciones de multiplicación y división, seguidas de sumas y restas, y las operaciones lógicas completan el cálculo.
Funciones personalizadas
Los scripts escritos en Visual Basic le permiten definir funciones y procedimientos personalizados y llamarlos desde el programa principal. Prácticamente no hay diferencia entre un procedimiento y una función, la diferencia radica en el sentido lógico de estas subrutinas: las funciones se suelen utilizar para calcular algún valor y los procedimientos se utilizan para realizar acciones. Sin embargo, tanto los procedimientos como las funciones pueden realizar operaciones y pasar valores al programa principal. A pesar de esto, no debe olvidarse del propósito de estas subrutinas: funciones - para cálculos, procedimientos - para acciones.
La función es declarada por el operador Función, seguido del nombre de la función definida por el usuario, que no debe coincidir con ninguna palabra reservada del lenguaje Visual Basic, luego se indican las variables que se pasarán a la subrutina como parámetros - especificando variables en esta construcción significa asignar celdas de memoria para las variables de la subrutina (variables de declaración para la función). En el cuerpo de la subrutina, la estructura del script no es diferente a la de un programa regular (aquí puede declarar variables adicionales, realizar operaciones, usar otras funciones y procedimientos), al final del cuerpo debe haber un operador para asignar una función a algún valor: este valor se devolverá al programa principal. Puedes interrumpir la ejecución de una función con la instrucción Exit Function, pero en este caso debes recordar asignar un valor a la función, de lo contrario el script generará un error. La función termina con la instrucción End Function.
Definición de función
Función
Llamada de función
Un procedimiento se define de manera similar a una función, pero con un operador -Sub diferente. Dado que el procedimiento no devuelve ningún valor al programa principal, no hay una instrucción de asignación antes de salir del procedimiento. La ejecución del procedimiento se puede interrumpir utilizando el comando Exit Sub, y toda la estructura se completa con la instrucción End Sub. Para llamar a un procedimiento en el programa principal, debe usar la palabra clave Call y el nombre de la función con los argumentos requeridos. (La palabra clave Call es opcional, pero recomiendo usarla para evitar llamadas a procedimientos incorrectos).
Definición de un procedimiento
Sub
Llamada a procedimiento
Por cierto, los procedimientos y funciones deben ubicarse al final del script.
Durante el funcionamiento de la subrutina, los valores de las variables en la parte principal del script no cambian, incluso si la subrutina contiene variables con el mismo nombre. Para que la subrutina pueda cambiar los valores de las variables del script principal, es necesario establecer la propiedad de la variable como ByRef en los argumentos de la subrutina. De forma predeterminada, todas las variables se definen con la propiedad ByVal.
Sub
En este caso, el argumento
Manejo de errores de ejecución de scripts
De forma predeterminada, la secuencia de comandos gestiona todos los errores en modo automático y, si se produce un error, la secuencia de comandos se detiene. Para deshabilitar el manejo automático de errores, debe usar una directiva especial On Error Resume Next, que deshabilita el manejo automático de errores y continúa el script incluso si está presente. Para el manejo manual de errores, debe consultar el objeto Err incorporado, que almacena el estado del error. El objeto Err tiene las siguientes propiedades y métodos:
Número "devuelve el número del último error; Descripción" devuelve la descripción del último error; Borrar "borrar objeto Err; Raise" llamar a un error de prueba.
Un ejemplo de manejo manual de errores:
En caso de error Reanudar Siguiente iTotalPoints = InputBox ("Ingrese el número total de puntos") iNumberOfTests = InputBox ("Ingrese el número de pruebas") iAvarage = iTotalPoints / iNumberOfTests Seleccione Caso Err.Number Caso 0 "sin errores; WScript.Echo" Promedio = "& CStr (iAvarage) Case 11" división por cero; WScript. WScript.Echo "Error desconocido WScript.Quit" End Select
Objetos, sus métodos y propiedades.
Los scripts VBS, como su padre, el lenguaje Visual Basic, es un lenguaje de programación orientado a objetos, es decir, el concepto principal es el concepto de objetos y clases.
Una clase es un tipo que describe cómo se estructuran los objetos. Un objeto significa algo que tiene un cierto comportamiento y una forma de presentación, un objeto es una instancia de una clase. Una clase se puede comparar con un dibujo según el cual se crean los objetos. Las clases suelen estar diseñadas para que sus objetos se correspondan con los objetos del dominio.
Entonces, para trabajar con un objeto, primero debe crearlo usando clases de la biblioteca requerida:
Colocar
Puede eliminar un objeto configurándolo en Nothing:
Colocar
Todos los objetos con los que trabaja Windows Script Host tienen métodos y propiedades. Para hacer referencia a un método, debe especificar un objeto y, a través de un punto, un método con los parámetros requeridos.
La situación es similar con las propiedades, pero las propiedades se pueden asignar y leer en variables y otras propiedades, sin embargo, debe tener en cuenta el tipo de datos de las variables y propiedades, de lo contrario el script generará un error de incompatibilidad de tipos de datos.
Ejemplo. Crear un objeto del sistema de archivos, llamar al método de creación de carpetas, eliminar el objeto. Establecer oFSO = CreateObject ("Scripting.FileSystemObject") Llamar a oFSO.CreateFolder ("C: \ Test") Establecer oFSO = Nada Tenga en cuenta que "objeto" se refiere a la lógica de la secuencia de comandos, no a la lógica del sistema de archivos. Es decir, cuando decimos "eliminar un objeto", nos referimos a un objeto de secuencia de comandos lógico que no afecta de ninguna manera la eliminación de algunas partes del sistema de archivos. Para averiguar qué bibliotecas existen en su sistema operativo, las clases incluidas en las bibliotecas, sus métodos y propiedades, puede utilizar el explorador de objetos, por ejemplo de Microsoft Word: Si alguna biblioteca no se refleja en la lista, entonces se puede conectar a través del menú Herramientas -> Referencias. Hay métodos en los scripts que no están incluidos en ninguna clase, están disponibles directamente en el cuerpo del script: MsgBox ( Un ejemplo de cómo mostrar un cuadro de diálogo con una solicitud de texto y luego mostrar un mensaje de ventana con el texto ingresado. MyValue = InputBox ("Ingresar texto", "Primera ventana", "El texto debe ingresarse aquí") MyResult = MsgBox (MyValue, 1, "Segunda ventana") Los métodos y propiedades de la clase raíz de WScript no requieren la creación de objetos; están disponibles automáticamente para su uso directamente en el cuerpo del script. Crear objeto ( Analizaremos la aplicación de estos métodos y propiedades con más detalle en los ejemplos de otras clases. Para trabajar con el sistema operativo, se utiliza un Shell de clase especial, que le permite realizar operaciones tales como iniciar programas, modificar el registro, crear accesos directos, acceder a carpetas y variables del sistema y acceder al registro del sistema. Entonces, los métodos y propiedades de la clase Shell: ExpandirEnvironmentStrings ( Ejemplo. Usando métodos y propiedades de la clase Shell. "Crear un objeto de la clase Shell Set oShell = Wscript.CreateObject (" WScript.Shell ")" Ejecutar calculadora oShell.Run ("Calc.exe") "Retrasar WScript.Sleep (100)" Ejecutar el bloc de notas oShell.Run ("Bloc de notas .exe ")" Delay WScript.Sleep (100) "Cambia a la ventana de la calculadora oShell.AppActivate" Calculator "" Delay WScript.Sleep (100) "Simula pulsaciones de teclas oShell.SendKeys (" 1 (+) 2 (=) ") "Obtener rutas de escritorio sDesktopPath = oShell.SpecialFolders (" Desktop ")" Crear objeto de acceso directo Establecer oLink = oShell.CreateShortcut (sDesktopPath & "\ Test.lnk") "Personalizar acceso directo oLink.TargetPath = WScript.ScriptFullName oLink.WindowLinkty .Hotkey = "CTRL + MAYÚS + T" oLink.IconLocation = "notepad.exe, 0" oLink.Description = "Enlace de prueba" oLink.WorkingDirectory = sDesktopPath oLink.Save "Crear objeto de entorno y obtener propiedades del sistema en él Establecer oSysEnv = oShell.Environment ("SISTEMA") "Muestra un mensaje sobre el número de procesadores en la pantalla MyResult = oShell.Popup (" Número de procesadores: "& oSysEnv (" NUMBER_OF_PROCESSORS "), _ 3," Message ", 0)" Obtener la ruta a la carpeta de Windows y mostrar el mensaje en la pantalla MyResult = oShell.Popup ("directorio de Windows:" & _ oShell.ExpandEnvironmentStrings ("% WINDIR%" ), 3, "Mensaje", 0) "Leer una clave de registro y mostrar su valor en la pantalla WScript.Echo oShell.RegRead (" HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ ProductID ")" Escribir un valor de cadena en el registro MyResult = oShell.RegWrite ("HKCU \ ScriptEngine \ Value", "My Value") "Escribiendo un valor numérico en el registro MyResult = oShell.RegWrite (" HKCU \ ScriptEngine \ Key ", 1," REG_DWORD ")" Eliminando la clave de registro MyResult = oShell.RegDelete ("HKCU \ ScriptEngine \") "Escribiendo un evento en el registro del sistema MyResult = oShell.LogEvent (0," Script de prueba completado ") Como ya hemos visto, los scripts de VBS pueden funcionar con el shell de Windows, pero esta no es su única posibilidad. Con la clase Red, puede acceder y administrar objetos de red. Echemos un vistazo más de cerca a la clase Red: ComputerName "devuelve el nombre del equipo; UserDomain" devuelve el nombre de dominio; UserName "return username; EnumNetworkDrives" lista de retorno de unidades de red asignadas; Unidad de red ( Ejemplo. Usando los métodos y propiedades de la clase Network. "Crear un objeto de clase Network Set oNetwork = WScript.CreateObject (" WScript.Network ")" Mostrar un mensaje sobre el nombre del equipo WScript.Echo "Computer Name =" & oNetwork.ComputerName "" Mostrar un mensaje sobre el nombre del usuario actual WScript.Echo "User Name =" & oNetwork.UserDomain & "\" & oNetwork.UserName "Asignar unidad de red oNetwork.MapNetworkDrive" Z: "" \\ Server \ Share "" Obtener colección de unidades de red asignadas Establecer oDrives = oNetwork.EnumNetworkDrives "Mostrar mensajes sobre unidades de red asignadas para i = 0 a oDrives.Count -1 paso 2 WScript.Echo" Drive "& oDrives.Item (i) &" = "& oDrives.Item (i + 1) Siguiente" Extracción de la unidad de red oNetwork.RemoveNetworkDrive "Z:" "Conexión de una impresora de red oNetwork.AddPrinterConnection" LPT1 "," \\ Server \ Printer "" Configuración de una impresora predeterminada oNetwork.SetDefaultPrinter "\\ Server \ Printer" "Obtención de una colección de conjunto de impresoras oPrinters = oNetwork.EnumPrinterConnections Muy a menudo, en escenarios, hay casos en los que es necesario crear, eliminar, mover o cambiar algo en el disco de la computadora. Esta tarea puede ser resuelta por la clase FileSystemObject, diseñada para trabajar con el sistema de archivos. Los siguientes son los objetos que esta clase puede crear: Métodos y propiedades de la clase FileSystemObject (objeto principal): Construir camino ( Los objetos Unidades, Carpetas y Archivos de la clase FileSystemObject almacenan información sobre discos, carpetas y archivos y se utilizan principalmente para recopilar información sobre el sistema de archivos. Solo tienen dos propiedades: Count "devuelve el número de elementos de la colección; Item ( Para que quede más claro qué es una colección de objetos, considere un ejemplo de cómo mostrar una lista de archivos en la raíz de la unidad C: "Crear objeto de clase FileSystemObject Set oFSO = CreateObject (" Scripting.FileSystemObject ")" Crear objeto Folder Set oFolder = oFSO.GetFolder ("C: \") "Obtener colección de archivos Set oFilesCollection = oFolder.Files" Obtener número de elementos en la colección sResult = sResult & oFilesCollection.Count & "archivos en C: \" & vbCrLf "Leyendo los atributos de cada archivo de la colección Para cada oFile en oFilesCollection sResult = sResult & oFile.Name & vbTab sResult = sResult & oFile.Size & vbCrLf Junto a la pantalla MsgBox (sResult) El objeto Drive proporciona acceso a las propiedades de una unidad local o de red: AvailableSpace "devuelve la cantidad de espacio libre en disco disponible para el usuario; DriveLetter" devuelve la letra de la unidad; DriveType "devuelve el tipo de unidad; FileSystem" devuelve el tipo de sistema de archivos de la unidad; FreeSpace "devuelve la cantidad de espacio libre en disco; IsReady" devuelve el espacio disponible en disco; Ruta "devuelve la ruta a la unidad; RootFolder" crea un objeto Carpeta que apunta a la raíz de la unidad; SerialNumber "devuelve el número de serie de la unidad; ShareName" devuelve el nombre de red de la unidad; TotalSize "Devuelve la capacidad del disco en bytes; VolumeName" Devuelve o establece la etiqueta del disco. El objeto Carpeta proporciona acceso a todas las propiedades de una carpeta y también le permite realizar acciones en ella: Atributos "devuelve los atributos de la carpeta; DateCreated" devuelve la fecha en que se creó la carpeta; DateLastAccessed "devuelve la fecha en que se accedió por última vez a la carpeta; DateLastModified" devuelve la fecha en que se modificó la carpeta; Drive "devuelve la letra de la unidad donde se encuentra la carpeta; Archivos" devuelve la colección de archivos en la carpeta; IsRootFolder "devuelve True si la carpeta es la raíz de la unidad; Name" devuelve el nombre de la carpeta; ParentFolder "crea un objeto Folder que apunta a la" carpeta principal; Ruta "devuelve la ruta a la carpeta; ShortName" devuelve el nombre de la carpeta en formato 8.3; ShortPath "devuelve la ruta a la carpeta en formato 8.3; Tamaño" devuelve el tamaño de la carpeta; Subcarpetas "devuelve una colección de subcarpetas; Tipo" devuelve el tipo de carpeta; Dupdo ( El objeto Archivo es similar al objeto Carpeta: proporciona acceso a todas las propiedades del archivo y también le permite realizar acciones en él: Atributos "devuelve atributos de archivo; DateCreated" devuelve la fecha de creación del archivo; DateLastAccessed "devuelve la fecha en que se accedió por última vez al archivo; DateLastModified" devuelve la fecha en que se modificó el archivo; Unidad "devuelve la letra de la unidad donde se encuentra el archivo; Nombre" devuelve el nombre del archivo; ParentFolder "crea un objeto Folder que apunta a la" carpeta principal; Ruta "devuelve la ruta al archivo; ShortName" devuelve el nombre del archivo en formato 8.3; ShortPath "devuelve la ruta al archivo en formato 8.3; Tamaño" devuelve el tamaño del archivo; Tipo "devuelve el tipo de archivo; Copiar ( El objeto TextStream es una herramienta para acceder al contenido de un archivo. Con él, puede leer y modificar el archivo: AtEndOfLine "indica si se ha alcanzado el final de la línea; AtEndOfStream" indica si se ha alcanzado el final de la línea; Columna "devuelve el número de la columna en la que se encuentra el cursor de lectura; Línea" devuelve el número de la línea en la que se encuentra el cursor de lectura; Cerrar "cierra el archivo, lo libera para otros procesos; Leer ( Nos familiarizamos con todos los métodos y propiedades de la clase FileSystemObject, considere un ejemplo del uso de esta clase: "Estableciendo las constantes para los códigos de carpeta del sistema Const WindowsFolder = 0 Const SystemFolder = 1 Const TemporaryFolder = 2" Estableciendo las constantes para los códigos de tipo de acceso a un archivo de texto Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 "Creando un objeto del FileSystemObject Set oFSO = CreateObject ("Scripting.FileSystemObject") "Obtener la colección de unidades Set DrivesCollection = oFSO.Drives" Procesar cada unidad para obtener su etiqueta o nombre de red para cada oDrive en DrivesCollection sResult = sResult & oDrive.Drive. & ":" Si oDrive.DriveType = Remoto Entonces sResult = sResult & oDrive.ShareName & vbCrLf ElseIf oDrive.IsReady Entonces sResult = sResult & oDrive.VolumeName & vbCrLf Else sResult = sResult y vbCrLos resultados de la pantalla de salida de WsResult = sResult y vbCr .Echo "= oFSO.GetDrive (" C ") sResult = oDrive.DriveLetter &": - "" Obtener el tipo de unidad C: Seleccionar caso oDrive.DriveType Caso 0: sResult = sResult & "Desconocido -" Caso 1: sResult = sResult & "Removable -" Caso 2: sResult = sResult & "Fixed -" Caso 3: sResult = sResult & "Network -" Caso 4: sResult = sResult & "CD-ROM -" Caso 5: sResult = sResult & "RAM Disk -" End Select "Determinando la disponibilidad del disco y obteniendo sus propiedades Si oDrive.IsReady Entonces sResult = sResult &" Ready "& vbCrLf sResult = sResult &" FileSystem is "& oDrive.FileSystem & vbCrLf sResult & sResult = sResult "Espacio disponible:" & _ FormatNumber (oDrive. object (carpeta de archivos temporales de Windows) Establecer oTempFolder = oFSO.GetSpecialFolder (TemporaryFolder) "Crear un objeto de archivo de texto (y crearlo en la raíz de la unidad C :) Establecer oFile = oFSO.CreateTextFile (" C: \ TestFile.txt " , True) "Escribir en archivo de texto oFile.WriteLine (" Esto es una prueba. ") OFile.WriteLine (sResult)" Cerrar el archivo de texto y liberarlo para otros procesa oFile.Close "Verificando la presencia de un archivo en la carpeta de archivos temporales de Windows, borrando este archivo Si oFSO.FileExists (oFSo.BuildPath (oTempFolder.Path," TestFile.txt ")) Entonces _ oFSO.DeleteFile (oFSo. BuildPath (oTempFolder. Path, "TestFile.txt")) "Crear objeto de archivo Set oFile = oFSO.GetFile (" C: \ TestFile.txt ")" Mover archivo a la carpeta de archivos temporales de Windows oFile.Move (oFSo.BuildPath (oTempFolder .Path, "TestFile.txt")) "Cambiar el atributo del archivo If oFile.Attributes y 32 Then oFile. Attributes = oFile.attributes - 32 Wscript.Echo ("El bit de archivo se borra") Else oFile.Attributes = oFile.attributes + 32 Wscript.Echo ("El bit de archivo está establecido") End If sResult = oFile.Path & vbCrLf & oFile .DateLastModified & ":" & vbCrLf "Cree un objeto de flujo abriendo un archivo para su lectura. Establecer oTestFile = oFSO.OpenTextFile (oFile.Path, ForReading, False)" Leer el flujo hasta que se encuentre el final del flujo Hacer mientras oTestFile.AtEndOfStream<>True sResult = sResult & oTestFile.ReadLine Loop "Cerrar el archivo de texto y liberarlo para otros procesos oTestFile.Close" Mostrar un mensaje en la pantalla Wscript.Echo (sResult) Este script está diseñado para limpiar el sistema de archivos obsoletos en directorios temporales y perfiles de usuario de Windows. En este ejemplo, puede ver cómo funcionan casi todas las construcciones anteriores: la estructura del script, los nombres de las variables, el trabajo con matrices y colecciones, el manejo manual de errores, la lectura de variables del sistema, la creación de un archivo de texto del registro de operaciones del script , trabajando con el sistema de archivos, usando procedimientos. "==== Encabezado de información del script ====" nombre del script: Purge Temp "versión: 1.0" fecha: 16.07.08 "autor: Bochkarev Vitaly" descripción: El script elimina los archivos temporales obsoletos de la computadora "==== Script Main Logic ==== "Habilitar el manejo manual de errores en caso de error Continuar siguiente" Constante para el intervalo de tiempo cuando los archivos se consideran obsoletos Const PurgeTime = 14 "días" Excepciones: perfiles de usuario que no deben manejarse Dim aExceptions (3) aExceptions ( 0) = "Usuario predeterminado" aExceptions (1) = "LocalService" aExceptions (2) = "NetworkService" aExceptions (3) = "Todos los usuarios" "Crear conjunto de objetos de Shell y del sistema de archivos oShell = CreateObject (" wscript.shell ") Set oFSO = CreateObject ("Scripting.Filesystemobject") "Definición de rutas de carpeta de servicio sProgramFiles = oShell.ExpandEnvironmentStrings ("% ProgramFiles% ") sWinDir = oShell.ExpandEnvironmentStrings ("% WinDir% ") sWinTempFolder = sWinTempFolder = sWinTempFolder = sWinTempFolder y configuración "" Creación del registro de trabajo de la escena sLogFileName = sWinTempFolder & "\ PurgeTemp_" & Date sLogFileName = Reemplazar (sLogFileName, ".", "_") sLogFileName = Reemplazar (sLogFileName, "/", "_") Establecer oLogFile = oTFSO.Cile log ", verdadero) oLogFile .WriteLine "========== Iniciar purga ==========" "Limpiar la carpeta temporal de Windows oLogFile.WriteLine vbCrLf &" ======= === Windows Temporary carpeta ========== "PurgeFolder (sWinTempFolder)" Elimina la carpeta temporal para el perfil de usuario y los archivos de Internet oLogFile.WriteLine vbCrLf & _ "========== Usuarios Carpeta temporal y Usuarios Internet temporal Archivos ========== "Establecer oDocuments = oFSO.GetFolder (sDocuments) Establecer colProfiles = oDocuments.SubFolders para cada oProfile en colProfiles bFlag = false Para cada sException en aExceptions if InStr (oProfile.Path, sException)> 0 luego bFlag = true salir para end if Next If bFlag = False Then PurgeFolder (oProfile.Path & "\ Local Settings \ Temp") PurgeFolder (oProfile.Path & "\ Local Settings \ Temporary Internet Files") End If Next "Borrando NOD32 Quarantine oLogFile.WriteLine vbCrLf &" ========== NOD32 Quarantine ========== "sQuarantine = sProgramFiles &" \ Eset \ Infected "PurgeFolder (sQuarantine)" Cerrando el registro de archivos oLogFile.WriteLine vbCrLf & "========== Detener purga ==========" oLogFile.Close "Procedimiento PurgeFolder - eliminar archivos antiguos Sub PurgeFolder (sFolderPath)" Creación de una carpeta Establecer objeto oFolder = oFSO.GetFolder (sFolderPath) "Obtener la colección de archivos Establecer colFiles = oFolder. Archivos "Procesar cada archivo de la colección Para cada oFile en colFiles" Verifique si el archivo está desactualizado If (Date-oFile.DateLastModified)> PurgeTime y (Date-oFile.DateCreated)> _ PurgeTime Then "Escriba el mensaje en el script log oLogFile.Writeline oFile.Path & vbTab & oFile.DateCreated "Eliminar archivo obsoleto oFSO.DeleteFile oFile.Path, True" Compruebe si hay errores si err.Number<>0 luego "Escriba un mensaje de error en el registro de script oLogFile.Writeline" -----> Error # "& CStr (Err.Number) _ &" "& Err.Description" Borrar error Err.Clear end if "Pause at 20 milisegundos WScript.Sleep 20 End if Next "Recuperando una colección de subcarpetas Set colSubFolders = oFolder.SubFolders" Procesando cada subcarpeta para cada oSubFolder en colSubFolders "Llamando recursivamente el procedimiento para borrar archivos antiguos - la subrutina se llama" PurgeFolder (oSubFolder.Path.Path ) "Si oSubFolder.Size = 0 Then" Escriba un mensaje en el registro de script oLogFile.Writeline oSubFolder.Path & vbTab & oSubFolder.DateCreated "Elimine la carpeta vacía oFSO.DeleteFolder oSubFolder.Path" Busque errores Si err.Number<>0 luego "Escriba un mensaje de error en el registro de script oLogFile.Writeline" -----> Error # "& CStr (Err.Number) _ &" "& Err.Description" Borrar error Err.Clear End if End if Next End Sub Así que hemos visto los conceptos básicos de Visual Basic Script. Resumamos e identifiquemos los pros y los contras de estos escenarios: Vitaly Bochkarev Sección de enlaces externos, es decir, enlaces a otros sitios a los que este recurso no tiene nada que ver. Además, el propietario del sitio del sitio no asume ninguna responsabilidad por la disponibilidad de estos recursos y por su contenido. VBScript utiliza un solo tipo de datos, Variant, que le permite almacenar un número, cadena, fecha, valor booleano, referencia de objeto y otra información en una variable. Puede determinar el tipo de contenido de una variable mediante un conjunto de funciones: VarType, TypeName, IsArray, IsDate, IsEmpty, IsNull, IsNumeric, IsObject, que se analizarán a continuación. El tipo de información que contiene también se denomina subtipo variante. En la siguiente tabla se muestra una lista completa de subtipos: desde -3.402823E38 hasta -1.401298E-45. Para positivo: de 1,401298E-45 a 3,402823E38. 79769313486232E308 a -4,94065645841247E-324. Para positivo: de 4.94065645841247E-324 a 1.79769313486232E308. Dependiendo de la expresión en la que participe la variable, su contenido se convertirá automáticamente al tipo requerido. Considere este ejemplo: Opción Subprueba explícita VBScript Dim A, B A = 5 B = "12" Application.MessageBox A + B, "", vbOkOnly End Sub Dado que una variable numérica está involucrada en la expresión A, el intérprete convierte el valor de la variable B de cuerda "12"
en el número y resumirlos: Cambiemos la macro para que la variable A también contenía la línea: Opción Sub Prueba explícita VBScript Dim A, B A = "5" B = "12" Application.MessageBox A + B, "", vbOkOnly End Sub Ejecútelo para su ejecución. Ahora la pantalla mostrará el resultado de la fusión (concatenación) de dos cadenas, y no la suma de sus representaciones numéricas: Para evitar confusiones con la conversión automática de tipos, se recomienda utilizar las funciones de conversión: CBool, CByte, CCur, CDate, CDbl, CInt, CLng, CSng, CStr. Si el resultado de una expresión es exactamente la concatenación de cadenas y no la suma de sus representaciones numéricas, entonces se debe usar el operador & en lugar de +. Una variable es una práctica representación simbólica de un área de la memoria donde una aplicación almacena algunos datos. Durante la ejecución de la aplicación, el valor de la variable puede cambiar. La variable debe declararse con la instrucción Dim antes de su uso. Con un operador, puede declarar varias variables a la vez si enumera sus nombres separados por comas: Atenuar izquierda, derecha, arriba, abajo Al declarar, no es necesario especificar el tipo de datos, ya que todas las variables son del tipo Variant. Si Option Explicit no se especifica en la primera línea del texto del script, las variables se pueden usar sin declaración. Pero esta ruta puede conducir a errores difíciles de detectar. Basta con cometer un error una vez en la ortografía del nombre de la variable en el texto del programa para obtener un resultado impredecible. Recomendamos que siempre especifique Option Explicit y declare variables. El nombre de la variable debe cumplir los siguientes requisitos: El alcance de una variable está determinado por el lugar donde se declaró. Si está dentro del cuerpo de un procedimiento, dicha variable se llama local y solo está disponible dentro de este procedimiento. Si se declara una variable en el texto del script, será visible para todos los procedimientos o funciones definidos en este script. Las variables locales pueden tener el mismo nombre si se declaran en diferentes procedimientos. En el árbol del Explorador de la ventana del Editor de objetos de secuencia de comandos, hay una sección especial (Constantes y variables) para declarar las variables globales visibles para todas las funciones de secuencia de comandos del proyecto. El intérprete asigna memoria para las variables locales en el momento en que se declaran y la libera al salir del procedimiento. Las variables globales existen desde el momento en que se declaran y hasta que el script finaliza su ejecución. En relación con Gedymin, esto significa que existen variables globales durante todo el tiempo de ejecución del programa. El valor de una variable declarada se asigna mediante el operador =. El nombre de la variable se indica a la izquierda del operador, el nuevo valor se indica a la derecha. Por ejemplo: A = 200 B = "Nombre" Una variable que contiene un solo valor se llama escalar. A veces, es necesario almacenar varios valores en una variable. En este caso, debe declarar una matriz. La sintaxis de declaración es idéntica a la declaración de variable escalar, excepto que después del nombre entre paréntesis, especificamos la dimensión de la matriz. La siguiente declaración creará una matriz de 12 elementos: Dim Monthes (11) En VBScript, el límite izquierdo del índice de la matriz es siempre 0. Por lo tanto, el tamaño de la matriz se calcula como el número entre paréntesis más uno. Al asignar un valor a un elemento de matriz, debe especificar su índice entre paréntesis: Monthes (0) = "enero" Monthes (1) = "febrero" Monthes (2) = "marzo" ... Monthes (10) = "noviembre" Monthes (11) = "diciembre" Del mismo modo, cuando nos referimos al valor de un elemento, usamos su índice: MonthName = Monthes (5) La matriz no tiene que ser unidimensional. VBScript nos permite especificar hasta 60 dimensiones al declarar una matriz. Por ejemplo, la siguiente declaración creará una matriz bidimensional de 12 filas y dos columnas: Dim MonthDays (11, 1) Al acceder a los elementos de una matriz multidimensional, se deben especificar todos los índices: MonthDays (0, 0) = "enero" MonthDays (0, 1) = 31 MonthDays (1, 0) = "febrero" MonthDays (1, 1) = 28 ... Arriba, declaramos matrices, cuyo tamaño no cambia mientras el programa se está ejecutando. Si no sabe de antemano cuántos elementos se necesitarán, puede declarar una matriz dinámica: Antes de su uso, debe establecer el tamaño de la matriz dinámica utilizando el operador ReDim: ReDim A (25) Durante la ejecución, puede llamar a la instrucción ReDim varias veces, cada vez cambiando el tamaño de la matriz. La opción Conservar conserva los valores de los elementos de la matriz cuando se cambia de tamaño. Por ejemplo, el siguiente código incrementará la matriz anterior en cinco elementos, dejando intactos los existentes: ReDim Preservar A (30) Recuerde que cuando disminuye el tamaño de la matriz, los valores de los elementos eliminados se perderán irremediablemente. Con la instrucción Erase, puede borrar los elementos de una matriz fija o liberar la memoria ocupada por una matriz dinámica. Dim A ReDim A (25) ... Borrar A Es una buena práctica declarar constantes para valores reutilizados en el texto del programa. Un nombre constante bien asignado mejora la legibilidad y su uso simplifica el proceso de realizar cambios en el código. A diferencia de las variables, el valor de una constante no se puede cambiar durante la ejecución del programa. Las constantes se crean utilizando el operador Const: Const CountryName = "Bielorrusia" Const CountryCode = 375 Se pueden declarar varias constantes dentro de un operador, separadas por comas. Como una variable, una constante tiene su propio alcance dependiendo de dónde (dentro o fuera del procedimiento) y cómo (Pública o Privada) fue declarada. Las constantes creadas por el operador Const sin especificar Public o Private son públicas de forma predeterminada. En el árbol del Explorador de la ventana del Editor de objetos de secuencia de comandos, hay una sección especial (Constantes y variables) para declarar constantes globales visibles para todas las funciones de secuencia de comandos del proyecto. Los valores de las constantes de cadena se incluyen entre comillas dobles. Los valores de tipo Fecha deben estar rodeados por signos de almohadilla (#) y deben usar el formato de mes / día / año de EE. UU. Por ejemplo: Día de la Independencia Pública Const = # 25/03/1918 # Para evitar confusiones entre constantes y variables, se recomienda utilizar un único prefijo para todas las constantes, por ejemplo "con", o escribir el nombre de la constante en mayúsculas. Para facilitar el trabajo del programador, VBScript contiene un conjunto constantes predefinidas. Los operadores de VBScript se dividen en cinco categorías: aritmética, comparación, combinación, booleano y asignación. Formato de operador de comparación: Resultado = expresión1 comparador no operador expresión2 donde se utilizan los siguientes operadores de comparación:< (меньше), <= (меньше или равно), >(mayor que),> = (mayor o igual), = (igual),<>(no es igual). Dependiendo de los tipos y valores de los operandos, la comparación se realiza de la siguiente manera: El operador especial Is se utiliza para comparar dos variables de objeto y devuelve True si ambas variables se refieren a la misma instancia de objeto. Resultado = expresión1 y expresión2 Si el operando no es una cadena, se convierte en un tipo de cadena. Si ambos operandos son nulos, entonces el resultado también es nulo; sin embargo, a diferencia de otros operadores, si solo un operando es nulo, se asume que es una cadena vacía. Un operando con el valor vacío también se trata como una cadena vacía "". VBScript nos proporciona los siguientes operadores lógicos: Se pueden utilizar expresiones booleanas o valores numéricos como operandos para operadores lógicos. En el primer caso, el resultado será una constante booleana, en el segundo, un número. Dependiendo del operador, la introducción de uno o dos valores nulos en la entrada puede dar como resultado un resultado nulo. El operador Not es unario y devuelve la negación lógica de la expresión. El operador Not realiza una inversión bit a bit en un operando numérico. El resto de los operadores lógicos son binarios. La siguiente tabla muestra los resultados de ejecutar cada uno de los operadores dependiendo del valor de los operandos Exp1 y Exp2: En la vida, los operadores Y y O se utilizan con mayor frecuencia, y con mucha menos frecuencia: Xor. No hemos tenido que lidiar con el uso práctico de los operadores Eqv e Imp. Si le resulta difícil lidiar con la tabla anterior, resumimos el efecto de estos operadores: Cuando se ejecuta bit a bit sobre operandos numéricos, el resultado del operador lógico se determina a partir de la siguiente tabla: El operador de asignación (=) se describe en detalle en la sección "Variables". Si una expresión contiene varios operadores, se aplican en un orden que se denomina precedencia de operadores. Puede cambiar el orden predeterminado utilizando paréntesis. Una expresión entre paréntesis siempre se evalúa primero. En una expresión que contiene operadores de diferentes categorías, primero se realizan las operaciones aritméticas, luego los operadores de comparación y, por último, los operadores lógicos. Todos los operadores de comparación tienen la misma precedencia y se evalúan de izquierda a derecha. Los operadores aritméticos y lógicos se evalúan en el siguiente orden: Si la multiplicación y la división ocurren en la misma expresión, entonces las operaciones se realizan en orden de izquierda a derecha. Una regla similar se aplica en el caso de la presencia simultánea de los operadores de suma y resta. El operador de concatenación de cadenas (&) no es aritmético y tiene prioridad entre los operadores aritméticos y de comparación. La secuencia de los operadores lógicos es la siguiente: Las expresiones condicionales se utilizan para controlar el orden de ejecución de los comandos del programa y le permiten organizar transiciones (ramas) y repeticiones de comandos. Normalmente, los operadores de comparación se utilizan junto con expresiones condicionales. La expresión de rama condicional If le permite ejecutar un grupo particular de comandos dependiendo del resultado de una expresión lógica o del valor de una variable booleana. Para ejecutar un solo comando cuando se cumple una condición determinada, se utiliza la sintaxis de expresión de una línea: Dim S If DatePart ("w", Now) = vbMonday Then S = "Monday" Application.MessageBox S, "", vbOkOnly Tenga en cuenta que la sección Else se omite en este caso. Para ejecutar un grupo de declaraciones, escríbalas entre las palabras clave Then y End If. Dim S If DatePart ("w", Now) = vbMonday Then S = "Hoy es lunes" Application.MessageBox S, "", vbOkOnly End If Si, cuando se cumple la condición, es necesario ejecutar un código, y si no se cumple la condición, otro, entonces se usa la sintaxis de la expresión con la sección Else: Dim S If DatePart ("w", Now) = vbMonday Then S = "Hoy es lunes" Else S = "Hoy no es lunes" End If Application.MessageBox S, "", vbOkOnly Si necesita elegir entre varias alternativas, la sintaxis con la construcción ElseIf es adecuada: Dim S, DD = DatePart ("w", Now) If D = vbMonday Then S = "Monday" ElseIf D = vbTuesday Then S = "Tuesday" ElseIf D = vbWed Wednesday Entonces S = "Wednesday" ... End If Application. MessageBox S, "", vbOkOnly Si las declaraciones se pueden anidar: Dim S, DD = DatePart ("w", Now) If D = vbMonday Then S = "Monday" Else If D = vbTuesday Then S = "Tuesday" De lo contrario Si D = vbWed Wednesday Entonces S = "Wednesday" Else ... End If End If End If Aunque el número de secciones ElseIf en una expresión condicional es ilimitado, su uso intensivo puede generar un código confuso e ilegible. En el caso de elegir una alternativa entre una variedad de posibles, dependiendo del valor de algún selector, se recomienda utilizar la expresión Seleccionar caso. Reescribamos el ejemplo del día de la semana usando una expresión de selección: Dim S Seleccione Case DatePart ("w", ahora) Case vbMonday S = "Monday" Case vbTuesday S = "Tuesday" Case vbWed Wednesday S = "Wednesday" ... Case Else Err.Raise 32000, "", "Día desconocido de la semana "Fin Seleccionar Dado que la expresión del selector se evalúa solo una vez, el uso de Select..Case da como resultado un código más eficiente. Se recomienda usar siempre la sección Case Else para capturar valores de selector no procesados o no válidos. Muy a menudo, surge una situación en la que es necesario volver a ejecutar el código. Para hacer esto, escriba una declaración en bucle que repita ciertos comandos una y otra vez. Las declaraciones de bucle se utilizan en muchas situaciones: al calcular un total sobre una lista de números, moverse a través de registros en un conjunto de datos o para ejecutar un bloque de código para varios objetos. Hay varios bucles, que se describen en las siguientes secciones. Algunos de ellos se cumplen mientras la condición es Verdadera, otros, mientras que la condición es Falsa. Y finalmente, están los que se ejecutan un número determinado de veces. Este operador está destinado a ejecutar un grupo de comandos hasta que una condición determinada sea Verdadera o hasta que se convierta en Verdadero. La condición se puede verificar como al comienzo del ciclo: Hacer [(Mientras | Hasta) condición] Bucle Y al final: Do Loop [(Mientras | Hasta) condición] El comando Exit Do puede aparecer un número ilimitado de veces en el cuerpo del bucle. Por lo general, se usa junto con la expresión condicional If..Then y le permite transferir el control a la instrucción que sigue inmediatamente al ciclo. Al usar Exit Do dentro de un bucle anidado, el control fluirá hacia el bucle exterior. El siguiente código reemplaza a los dados: Dim Resp, Num Do Num = Int (6 * Rnd + 1) Resp = Application.MessageBox (Num & "Another number?", "", _ VbYesNo o vbQuestion) Bucle hasta Resp = vbNo Es una versión truncada del operador Do..Loop y le permite ejecutar un grupo de comandos mientras la condición es Verdadera. Sintaxis del operador: Mientras que la condición Wend Tenga en cuenta que Exit Do no tiene ningún efecto dentro de este bucle. Mientras ... Los bucles Wend se pueden anidar. Este bucle repite un conjunto específico de comandos un número específico de veces. La sintaxis del operador es: Para contador = inicio Para finalizar Siguiente Antes de que comience el ciclo, la variable de contador está configurada para comenzar. A continuación, se comprueba el cumplimiento de la condición del contador.<= end, при step >= 0, o contador> = fin, si el paso es negativo. Después de la ejecución del bloque de comandos, la variable contador se incrementa en el valor de paso y todo se repite desde el principio. No se prohíbe cambiar el contador en el cuerpo del bucle, pero se desaconseja enfáticamente, ya que complica la comprensión de la lógica del programa y su depuración. Exit For puede aparecer tantas veces como desee en el cuerpo del bucle. Los bucles se pueden anidar. Por ejemplo, un bucle como este inicializa una matriz 3D: Dim A (9, 9, 9) Dim I, J, K Para I = 0 a 9 Para J = 0 a 9 Para K = 0 a 9 A (I, J, K) = 1 Siguiente Siguiente Siguiente La instrucción de bucle For Each..Next repite un conjunto específico de comandos para cada elemento de una matriz o colección y tiene la siguiente sintaxis: Para cada elemento del grupo Siguiente El ciclo se ejecuta si hay al menos un elemento en la matriz o colección. Exit For puede aparecer tantas veces como desee en el cuerpo del bucle. Ilustremos el uso de For Each ... Next con el siguiente código, que muestra una lista de archivos del directorio raíz de la unidad c: \ Dim fso, f, f1, fc, s Establecer fso = CreateObject ("Scripting.FileSystemObject") Establecer f = fso.GetFolder ("c: \") Establecer fc = f.Files For Each f1 in fc s = s & f1 .name & vbNewLine Next Application.MessageBox s, "Archivos en c: \", vbOkOnly Para ahorrar memoria y estructurar el programa, un fragmento de código que se llama repetidamente en diferentes lugares puede formatearse como un procedimiento. Hay dos tipos de procedimientos en VBScript: Subs y Funciones. Una subrutina es una secuencia de declaraciones rodeadas por las palabras clave Sub y End Sub. La subrutina puede aceptar parámetros como entrada, pero no devuelve un valor. Una función, una secuencia de declaraciones encerradas entre una función y una función final, devuelve un resultado y, por lo tanto, se puede usar en una expresión. Cada procedimiento debe tener un nombre único dentro del módulo. Los nombres de los procedimientos declarados en el módulo global deben ser únicos en todo el proyecto. La definición de una subrutina y una función tiene la siguiente sintaxis: | Privado] Subnombre [(arglist)] End Sub | Privado] Nombre de la función [(arglist)] Finalizar función Los procedimientos públicos son globales y están disponibles en todos los guiones del programa. Los procedimientos privados están disponibles solo en el script donde se declararon. A menos que se indique lo contrario, el procedimiento declarado está a disposición del público. La palabra clave predeterminada se puede usar solo en el cuerpo de la clase y sirve para indicar el método predeterminado de esta clase. La lista de parámetros tiene la siguiente sintaxis: Varname [, ...] Los parámetros se pueden pasar por valor (ByVal) o por referencia (ByRef). De forma predeterminada, todos los parámetros se pasan por valor. Constantes, los resultados de la evaluación de expresiones solo se pueden pasar por valor. Cambiar el parámetro pasado por referencia cambiará el valor de la variable externa. Expliquemos la transferencia de parámetros al procedimiento usando el siguiente ejemplo: Sub DoCalculation (ByRef A, ByVal B, ByVal C) A = C * 2 B = C / 2 End Sub Sub TestVar Dim V1, V2 V1 = 1 V2 = 2 DoCalculation V1, V2, 10 "Después del procedimiento DoCalculation" V1 = 20 "V2 = 2 End Sub Las variables declaradas dentro del cuerpo de un procedimiento son locales y se destruyen cuando completa su ejecución. Los valores de las variables locales no se guardan. La lista de parámetros se indica entre paréntesis cuando se llama a una función o cuando se llama a una subrutina utilizando el operador de llamada. Entonces, podríamos escribir la llamada del procedimiento DoCalculation en el ejemplo anterior de la siguiente manera: Llamar a DoCalculation (V1, V2, 10) VBScript le permite crear nuevas clases, a las que llamaremos clases VB a continuación. En términos generales, no son clases completas en la comprensión de la programación orientada a objetos, ya que no admiten la herencia y, en consecuencia, el polimorfismo. Entonces, de las tres ballenas en las que se basa el paradigma orientado a objetos, solo queda la encapsulación: la capacidad de combinar datos y métodos dentro de una entidad. La definición de una clase se lleva a cabo utilizando la siguiente construcción: Declaraciones de nombre de clase End Class donde nombre es el nombre de la clase y las declaraciones son una o más definiciones de variables, propiedades, procedimientos o funciones, también conocidas como miembros de la clase. Tenga en cuenta que, a diferencia de Delphi, donde el código de definición de clase contiene solo declaraciones de funciones y procedimientos, en una clase VB, el código de miembro se escribe directamente en el texto de la clase. Los miembros de la clase pueden declararse privados o públicos. Los primeros son visibles solo dentro del código de esta clase, mientras que los segundos están disponibles tanto para el código interno como para el exterior. Si una variable o función (procedimiento) no contiene una definición explícita de Público o Privado, entonces se consideran públicos. Los procedimientos o funciones declarados como Públicos dentro de un bloque de clase se convierten en métodos de esta clase. Las variables declaradas como públicas se convierten en propiedades de clase junto con las propiedades declaradas directamente mediante las construcciones Property Get, Property Let y Property Set. Anteriormente, ya dijimos que los campos de una clase, ya sean declarados explícitamente o no explícitamente como Públicos, se convierten en sus propiedades. Además, puede crear una propiedad de clase definiendo funciones especiales para leer el valor de la propiedad (Property Get), así como para asignarlo (Property Let o Property Set). La sintaxis para definir tales funciones es la siguiente: | Privado] Propiedad Obtener nombre [(arglist)] [nombre = expresión] [nombre = expresión] Propiedad final Propiedad Let name (valor) Propiedad final Propiedad Nombre del conjunto (referencia) Propiedad final Al definir solo una función, lectura o asignación, puede crear una propiedad de solo lectura o de solo escritura, respectivamente. El procedimiento Property Let se usa para asignar tipos de datos simples, y el procedimiento Property Set se usa para pasar una referencia de objeto. Tenga en cuenta que las tres funciones pueden aceptar una lista de parámetros arbitraria como entrada. Así es como puede organizar, por ejemplo, las propiedades de la matriz pasando el índice del elemento como argumento. Se crea una instancia de una clase VB utilizando el operador New. Dim X Set X = Nuevo nombre de clase La destrucción de una instancia creada previamente ocurre automáticamente al completar el bloque de código donde se declaró la variable correspondiente y siempre que no existan referencias externas a la misma. Si necesita destruir manualmente la instancia, debe asignar el valor Nothing a la variable. 'Declarando una variable y creando una instancia de la clase Dim X Set X = New classname ...' usando una instancia de la clase ... 'destruyendo una instancia de la clase Set X = Notning ... El evento Initialize ocurre cuando se crea una instancia de la clase y Terminate cuando se destruye. El desarrollador puede definir sus propios controladores de datos de eventos. A continuación se muestra un ejemplo del uso de los eventos de creación y eliminación de un objeto: Clase TestClass "Defina el controlador de eventos Initialize. Private Sub Class_Initialize MsgBox (" TestClass iniciado ") End Sub" Defina el controlador de eventos Terminate. Private Sub Class_Terminate MsgBox ("TestClass terminated") End Sub End Class "Crea una instancia de la clase TestClass." El mensaje "TestClass inició" Set X = New TestClass "Destruye la instancia." El mensaje "TestClass terminó" Set X = Nada Algo que corrí completamente por delante y no te conté de dos funciones del cuadro de diálogo: MsgBox y InputBox... En este pequeño tutorial, te contaré todo el pribluda para estas dos funciones. También hay otras formas de crear cuadros de diálogo, pero esto requerirá Objetos WSH, que se discutirá en las próximas lecciones. La función más común para mostrar un mensaje. Por supuesto que es más difícil que Objeto de eco WScript, pero tampoco necesita un objeto. Parámetro Botones puede tomar varios valores al mismo tiempo. Para indicarlos, use el signo "+" o simplemente use la suma de los valores. Los valores de este parámetro se muestran a continuación. Cabe señalar que el parámetro Botones no puede aceptar varios valores de la misma categoría. Estos valores simplemente se sumarán. Es decir, no podrá instalar varios conjuntos de botones o iconos al mismo tiempo. "Lección Nº 16 de VBScript:" Function MsgBox y InputBox "file_1.vbs" ******************************* *********************** MsgBox "Hola", 5 + 16, "Título" MsgBox "Hola", vbRetryCancel + 16, "Título" MsgBox "Hola ", vbRetryCancel + 524288," Título "MsgBox" Hola ", vbAbortRetryIgnore + vbInformation + vbDefaultButton2 + vbSystemModal + 524288," Título "MsgBox" Hola ", 528706," Título " "********************************************************
"Lección n. ° 16 de VBScript: "Función MsgBox y InputBox "archivo_1.vbs "********************************************************
MsgBox "Hola", 5 + 16, "Título" MsgBox "Hola", vbRetryCancel + 16, "Título" MsgBox "Hola", vbRetryCancel + 524288, "Título" MsgBox "Hola", vbAbortRetryIgnore + vbInformation + vbDefaultButton2 + vbSystemModal + 524288, "Título" MsgBox "Hola", 528706, "Título" Además, la función MsgBox puede devolver el resultado de presionar botones. Puede asignarse a una variable y así determinar el botón pulsado. "********************************************** * ****** "Lección # 16 de VBScript:" Función MsgBox y InputBox "file_2.vbs" ************************** * ***************************** Dim Knopka Knopka = MsgBox ("Presione cualquier botón", 2, "Título") Si Knopka = 3 Luego MsgBox "Presionó el botón - Abortar" ElseIf Knopka = 4 Luego MsgBox "Presionó el botón - Repita" Else MsgBox "Presionó el botón - Saltar" Fin si "********************************************** * ****** "Lección # 16 de VBScript:" Función MsgBox y InputBox "file_4.vbs" ************************** * ***************************** Dim Dict, AboutBomb Set Dict = CreateObject ("Scripting.Dictionary") Dict.CompareMode = 1 Dict .Agregue "Amarillo", "¡La bomba explotó!" Dict.Agregue "Rojo", "¡Desactivó la bomba!" Dict.Agregue "Azul", "¡La bomba explotó!" Dict.Agregue "Verde", "La bomba explotó ! "AboutBomb = InputBox (" ¡Bomba detectada! ¿Qué cable cortar: amarillo, rojo, azul o verde? "," ¡¡¡Bomba detectada !!! "," Ingrese el color del cable aquí ... ") Si el diccionario existe (AboutBomb) luego MsgBox Dict.Item (AboutBomb) else MsgBox "¡Tu vista es mala! ¡No existe tal cable! ¡¡¡La bomba explotó !!! "finaliza si "********************************************************
Propiedades y métodos de la clase raíz de WScript
Métodos y propiedades de la clase Shell
Métodos y propiedades de la clase de red
Propiedades y métodos de la clase FileSystemObject
Eliminar secuencia de comandos de archivos antiguos
enlaces externos
Tipos de datos
Subtipo
Descripción
Vacío
A la variable no se le ha asignado un valor. Cuando se usa una variable no inicializada en expresiones numéricas, se sustituirá 0 y en cadenas, una cadena vacía.
Nulo
La variable no contiene datos.
Booleano
Boolean puede ser Verdadero o Falso.
Byte
Un número entero en el rango de 0 a 255.
Entero
Un número entero en el rango de -32,768 a 32,767.
Divisa
Un número de punto fijo en el rango -922 337 203 685 477,5808 a 922 337 203 685 477,5807.
Largo
Un número entero en el rango -2147483 648 a 2147483 647.
Soltero
Número de coma flotante de precisión simple. Para valores negativos, el rango válido es
Doble
Número de coma flotante de doble precisión. Para valores negativos, el rango aceptable es
Fecha y hora)
Contiene un número que representa una fecha en el rango del 1 de enero de 100 al 31 de diciembre de 9999.
Cuerda
Una secuencia de caracteres. La longitud máxima está en la región de 2 mil millones de caracteres.
Objeto
Un objeto.
Error
Numero erroneo.
Variables
Alcance y vida útil
Asignar un valor a una variable
Matrices y variables escalares
Constantes
Operadores
Operadores aritméticos
Operador
Ejemplo de uso
Descripción
^
número ^ exponente
Aumenta el número a exponente. El número puede ser menor que cero solo en el caso de un grado entero. Si uno de los operandos es Nulo, toda la expresión se evalúa como Nulo. Si se realizan múltiples exponenciaciones seguidas, el resultado se calcula de izquierda a derecha.
*
número1 * número2
Producto de dos números. Si el operando está vacío, se supone que es cero. Si al menos uno de los operandos es nulo, toda la expresión se evalúa como nula.
/
número1 / número2
División real de dos números. Para los operandos, las reglas son las mismas que para el operador de multiplicación.
\
número1 \ número2
División entera. Ambos operandos se convierten al tipo Byte, Integer o Long antes de ser evaluados. De lo contrario, se aplican las mismas reglas que para el operador de división.
Modificación
número1 Mod número2
Resto de una división entera. Conversión de operandos a un entero, así como las reglas para manejar Empty y Null, como en la división de enteros.
+
expresión1 + expresión2
Si ambos operandos son números, el resultado es su suma aritmética. Si ambos operandos son cadenas, concatenación (concatenación) de dos cadenas. Si un operando es un número y el otro es una cadena, entonces el operando de cadena se convertirá en un número y se agregará al numérico. Si al menos uno de los operandos es nulo, toda la expresión se evalúa como nula. Si ambos operandos están vacíos, el resultado es un valor entero de 0. Si solo un operador es vacío, el valor del segundo operando se devuelve como resultado.
-
número1 - número2 o - número
En el primer caso, devuelve la diferencia de dos números. En el segundo, invierte el signo del número. Las reglas para los operandos nulos y vacíos son las mismas que para el operador de multiplicación.
Operadores de comparación
Si
Ese
Ambos operandos son números.
Compara dos números.
Ambos operandos son cadenas.
Se realiza la comparación de dos cadenas.
Uno de los operandos es un número y el segundo es una cadena.
El operando de cadena se convierte en un número y se realiza una comparación de los dos números.
Uno de los operandos es vacío y el otro es un número.
Se supone que el operando con el valor vacío es 0.
Uno de los operandos es vacío y el segundo es una cadena.
Se asume que el operando con el valor Vacío es la cadena vacía "". Se realiza la comparación de dos cadenas.
Ambos operandos están vacíos.
Los operandos se consideran iguales.
Al menos uno de los operandos es nulo.
El resultado es nulo.
Operadores de concatenación
Operadores logicos
Exp1
Exp2
Y
O
Xor
Eqv
Diablillo
Cierto
Cierto
Cierto
Cierto
Falso
Cierto
Cierto
Cierto
Falso
Falso
Cierto
Cierto
Falso
Falso
Falso
Cierto
Falso
Cierto
Cierto
Falso
Cierto
Falso
Falso
Falso
Falso
Falso
Cierto
Cierto
Cierto
Nulo
Nulo
Cierto
Nulo
Nulo
Nulo
Falso
Nulo
Falso
Nulo
Nulo
Nulo
Cierto
Nulo
Cierto
Nulo
Cierto
Nulo
Nulo
Cierto
Nulo
Falso
Falso
Nulo
Nulo
Nulo
Nulo
Nulo
Nulo
Nulo
Nulo
Nulo
Nulo
Nulo
Exp1
Exp2
Y
O
Xor
Eqv
Diablillo
0
0
0
0
0
1
1
0
1
0
1
1
0
1
1
0
0
1
1
0
0
1
1
1
1
0
1
1
Operador de asignación
Orden del operador
Expresiones condicionales
Expresión Si .. Entonces .. Else
Seleccione .. Expresión de caso
Operadores de bucle
Operador Do..Loop
Mientras ... vamos
Para ... Siguiente
Para cada uno ... Siguiente
Procedimientos
Ejecutar expresión
Clases de VBScript
Definición de propiedades de clase
Creando y destruyendo una instancia de una clase VB
Inicializar y finalizar eventos
Función MsgBox
Sintaxis: MsgBox (Solicitud [, Botones] [, Título] [, Archivo de ayuda, Contexto])Constantes del cuadro de diálogo (botones de salida):
Constantes del cuadro de diálogo (iconos visualizables):
Constantes del cuadro de diálogo (botones predeterminados):
Constantes del cuadro de diálogo (modo ventana):
Otro:
Resultado devuelto de botones presionados (constantes):