Comandos para scripts vbs. VBScript. Conceptos básicos de VBScript. Métodos y propiedades de la clase raíz de WScript

Continuación

Guión visual básico

¿Por qué necesitamos scripts VBS?

El script VBS es una poderosa solución para automatizar las acciones del usuario en sistemas Windows. Este tipo de script se utiliza normalmente para:

  • crear escenarios complejos;
  • utilizar objetos de otras aplicaciones y bibliotecas;
  • ocultar ventanas durante la ejecución del script;
  • Cifrado de la lógica del script.

Los scripts VBS se utilizan principalmente para el procesamiento de datos, la gestión de sistemas, trabajar con cuentas de usuario y de computadora, interactuar con aplicaciones de oficina, trabajar con bases de datos y otras tareas complejas.

Disposiciones básicas

Dependiendo del lenguaje de escritura, el contenido y el cifrado, se encuentran los siguientes tipos de escritura:

  • vbs - Guión de Visual Basic
  • vbe - secuencia de comandos de Visual Basic cifrada
  • js - secuencia de comandos Java
  • jse: secuencia de comandos Java cifrada
  • wsh - configuración del script
  • wsf: script federado XML

En este artículo analizaré los scripts de tipo vbs.

Los scripts generalmente se editan en el Bloc de notas de Windows, pero recomiendo usar Notepad2, que resalta las palabras clave del lenguaje Visual Basic y ayuda a formatear el cuerpo del script. Entonces, un script vbs es un archivo de texto normal llamado *.VBS, que puede editarse fácilmente en el Bloc de notas y ejecutarse haciendo doble clic o llamando al 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 de lenguaje VBS, e incluso hay dos intérpretes de este tipo en Windows: WScript de 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 un script en la ventana de la consola, debe ejecutarlo a través de CScript o configurar CScript como el intérprete predeterminado. Para hacer esto, debe ejecutar lo siguiente en la línea de comando:

CScript //H:CScript

Después de lo cual todos los scripts se ejecutarán en modo consola. El regreso al modo 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;
  • Las mayúsculas y minúsculas no son sensibles;
  • no se tiene en cuenta el número de espacios entre parámetros;
  • la línea de comando se puede dividir y en el lugar de interrupción debe insertar el símbolo "_";
  • la longitud máxima del nombre de variable es de 255 caracteres;
  • Los comentarios se indican con el 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 === Opción explícita " directiva , que prohíbe la creación automática de " variables; Oscuro "declaración de variables; Dim () "declaración de matrices; Conjunto " conectar objetos; " === Lógica principal del script === " cuerpo del script; " === Funciones y procedimientos === " Procedimientos y funciones;

variables

De forma predeterminada, las variables en los scripts se declaran automáticamente la primera vez que se usan en el cuerpo del script, a menos que lo prohíba la directiva Option Explicit. Si declara la directiva Option Explicit al comienzo del script, todas las variables deben definirse de antemano utilizando las siguientes construcciones:

Oscuro " variable accesible a todas las subrutinas; Pública "variable accesible a todas las subrutinas; Privado "una variable accesible sólo para el programa actual y sus subrutinas;

Las constantes se declaran al principio del script utilizando la siguiente construcción:

constante = "constante disponible para todas las subrutinas; Public Const = "constante disponible para todas las subrutinas; Private Const = "una constante accesible sólo para el programa actual" y sus subrutinas.

El tipo de variable se asigna automáticamente después de ingresar el primer valor. Los siguientes tipos de datos existen en Visual Basic:

  • vacío - variable no inicializada;
  • nulo - variable vacía;
  • booleano: tipo lógico, 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 monetario, valores posibles: -922337203685477.5808 a 922337203685477.5807;
  • único - número de punto flotante, 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 punto 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;
  • string - variable de cadena, capacidad de hasta 2 mil millones de caracteres;
  • objeto: puntero a un objeto;
  • error - código de error.

Se puede verificar que los datos cumplan con el tipo, así como convertirlos de un tipo a otro, si los valores lo permiten. Los siguientes comandos se utilizan para operaciones con tipos de datos:

TipoVar( ) " devolver número de tipo de variable; TypeName( ) "devuelve el nombre del tipo de variable; IsArray( ) " comprobando que la variable es una matriz; IsDate( ) " comprobando que la variable es una fecha; IsEmpty( ) "verifique que la variable no esté inicializada; IsNull( ) " comprobando que la variable esté vacía; IsNumeric( ) " comprobando que una variable es un número; IsObject( ) " comprobando que una variable es un objeto; CCur( ) " conversión al tipo de moneda; CBool( ) "convirtiendo una variable a tipo booleano; CByte( ) "convertir una variable a un tipo de byte; CDate( ) "convertir una variable al tipo de fecha; CDbl( ) "convirtiendo una variable a un tipo doble; CInt( ) "convertir una variable a un tipo entero; CLng( ) "convertir una variable a un tipo largo; CSng( ) "convertir una variable a un solo tipo; CStr( ) "convertir una variable a un tipo de cadena.

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 el tipo de datos pueda identificarse fácilmente en el texto del script. Para ello, se recomienda anteponer el nombre de la variable con símbolos condicionales que determinan el tipo de variable:

  • iValueName - tipos numéricos
  • sValueName - tipo de cadena
  • bValueName - tipo booleano
  • dValueName - fecha
  • oValueName - objeto
  • cValueName - constante
  • aArrayName - matriz

En los scripts VBS, es posible utilizar matrices de variables que le permiten almacenar listas, tablas e incluso estructuras más complejas. Las matrices unidimensionales (listas) pueden ser dinámicas, es decir, permiten que su dimensión cambie a medida que se ejecuta el script. Todas las matrices se declaran con el comando Dim:

Oscuro

Ejemplo de uso de matrices

Dim aMyArray1(10,10) " crea una matriz estática de tamaño 11x11; Dim aMyArray2() " crea una matriz dinámica; aMyArray1(0,0) = "Hola" " llenando la matriz; aMyArray1(0,1) = "Personas" " llenando la matriz; aMyArray1(1,0) = "Mundo" " llenando la matriz.

Antes de usar una matriz dinámica, debe indicar la dimensión actual usando el comando ReDim, después de lo cual la matriz se puede reformatear en cualquier parte del script, ya sea borrando toda la matriz o guardando los valores de celda antiguos con el comando Conservar:

ReDim aMyArray2(0) " formando una matriz a partir de un elemento; aMyArray2(0) = "Hola" " llenando la matriz; ReDim aMyArray2(1) " eliminando la matriz antigua 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 array de tres elementos, dejando " los valores antiguos de los elementos en las celdas donde estaban; aMyArray2(1) = "!" "llenando una matriz; Erase aMyArray2" eliminando una matriz.

Para conocer 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 por condición

Ningún escenario completo está completo sin que las ramas ayuden a elegir el camino correcto cuando se cumple o no alguna condición subyacente. En otras palabras, las ramas implementan la lógica del script. Los scripts VBS implementan varios mecanismos de ramificación. Veámoslos en orden.

Construcción para una acción realizada según una condición:

Si Entonces

Un diseño para varias acciones realizadas en función de una condición:

Si Entonces terminar si

Diseño de horquilla:

Si Entonces Demás terminar si

Construcción "bifurcación en varios caminos" (opción cIf):

Si Entonces De lo contrario si Entonces Demás terminar si

En todas las construcciones anteriores, se aplica la siguiente regla: “Si se cumple la condición , luego produce una lista de acciones , que se encuentran debajo del bloque de condición actual. Si no se cumple la condición actual, vaya a la lista de acciones bajo el comando Else."

Construcción "bifurcación en varios caminos" (opción con Seleccionar):

Seleccionar caso Caso Caso Caso más Seleccionar fin

La siguiente regla funciona en esta construcción: “Si el valor de una variable es igual al valor , luego realice una lista de acciones debajo de este valor; de lo contrario, vaya a verificar el siguiente valor ."

Ciclos

Los bucles se utilizan generalmente para organizar acciones repetidas o iterar a través de elementos de una matriz. En los scripts VBS, se organizan varios tipos de bucles: un bucle normal, un bucle con un número desconocido de iteraciones y un bucle condicional.

Un bucle normal está organizado por la estructura For - Next, cuyos argumentos especifican parámetros como el nombre del contador ( ), valor del contador inicial ( ), valor final del contador ( ) y, si es necesario, el contrapaso (Paso ).

Para = A Próximo

Si necesita dejar de iterar sobre los valores mientras se ejecuta el bucle, puede hacerlo usando el comando Salir para

Para = A Si Luego salga por Próximo

Un bucle con un número desconocido de iteraciones se suele utilizar para recorrer todos los valores de una colección de un objeto cuando se desconoce su dimensión. Esta estructura iterará sobre todos los valores ( ) de la matriz pasada como parámetro de bucle ( ).

Para cada uno En Próximo

Para cada oCurrentFile en oFiles WScript.Echo oCurrentFile.Name Siguiente

Los bucles condicionales se utilizan para procesar datos cuando se cumple alguna condición. Hay dos tipos de bucles de este tipo: con verificación al comienzo del ciclo y con verificación al final.

Repita hasta que se cumpla la condición, comprobando al principio

hacer mientras Bucle

Repita hasta que se cumpla la condición, comprobando al principio

hacer hasta Bucle

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. Al igual que en los bucles normales, un bucle con una condición se puede interrumpir con el comando Exit Do:

Hacer Si Luego salga Bucle hasta

Funciones integradas

Para trabajar con datos y crear sus propios procedimientos y funciones, los desarrolladores de Visual Basic ya se han ocupado de la base de los scripts: las funciones básicas. Funciones de scripts VBS para trabajar con fechas, cadenas y números, así como procedimientos básicos de entrada y salida y procedimientos de red. Echemos un vistazo rápido a las funciones integradas.

Funciones de procesamiento de fechas:

Fecha "devuelve la fecha actual; Hora" devuelve la hora actual; Ahora "devuelve la fecha y hora actuales; DateDiff( , , ) " devuelve la diferencia entre fechas; NombreMes( ) " devuelve el nombre del mes; WeekDayName( , , ) " devuelve el nombre del día de la semana; Día( ) "devuelve el día a partir de la fecha especificada; Mes( ) " devuelve el mes a partir de la fecha especificada; Año( ) " devuelve el año a partir de la fecha especificada; Hora( ) " devuelve la hora a partir de la fecha especificada; Minuto( ) " devolver el minuto de la fecha especificada; Segundo( ) "devuelve el segundo a partir de la fecha especificada.

Funciones de procesamiento de cadenas:

Asc( ) " devuelve el código ANSI de un carácter; Chr( ) " carácter de retorno por código ANSI; InStr( , ) " devuelve la posición de una subcadena en la " cadena especificada; InStrRev( , ) " devuelve la posición de una subcadena en la " cadena especificada, comenzando desde el final de la cadena; Unirse( , ) " convertir matriz en cadena; Len( ) " longitud de la cadena de retorno; LCase( ) " convertir una cadena en una cadena de " caracteres pequeños; UCaso( ) " convertir una cadena en una cadena de " caracteres grandes; Izquierda( , ) " devuelve el número especificado de caracteres desde " el principio de la cadena; Bien( , ) " devuelve el número especificado de caracteres desde " el final de la cadena; Medio( , , ) "devuelve el número especificado de caracteres de" el número de carácter de cadena especificado; Reemplazar( , , [, Params]) " reemplazando una subcadena en la cadena especificada; Espacio ( ) "cadenas del número especificado de espacios; Split( , [, Params]) "convirtiendo una cadena en una matriz; String( , ) " una cadena de un número específico de " caracteres definidos; SrtReversa( ) "reflejar una línea; Recortar( ) "recortar los espacios en blanco a la izquierda y a la derecha de la línea; LTrim( ) " recortar espacios a la izquierda de la línea; RTrim( ) "recorta los espacios a la derecha de la línea.

Funciones matemáticas:

Randomize " inicializa el motor de números aleatorios (no devuelve nada); Rnd " devuelve un valor aleatorio no entero de 0 a 1; Atn( ) "cálculo del arcotangente de un número; Cos( ) "calcular el coseno de un número; Sin( ) "calcular el seno de un número; Exp( ) "cálculo del logaritmo natural de un número; Log( ) "calcular el logaritmo decimal de un número; Sqr( ) "calcular la raíz cuadrada de un número; Abs( ) "calcular el valor absoluto de un número; Hex( ) "calcular el valor hexadecimal de un número; Int( ) " redondear un número; Fix( ) "calcular la parte entera de un número.

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 - resto de la división de dos números;
  • ^ - exponenciación;
  • & - concatenación de dos cadenas;
  • Es - comparación de dos objetos;
  • Eqv - comparación de dos expresiones;
  • No - operación de negación lógica;
  • Y - operación de conjunción lógica;
  • O - operación lógica de disyunción;
  • Xor - operación de exclusión lógica;
  • Imp es la operación lógica de implicación.

El orden 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, seguido de la suma y la resta, y las operaciones lógicas completan el cálculo.

Funciones personalizadas

Los scripts escritos en Visual Basic le permiten definir procedimientos y funciones personalizados y llamarlos desde el programa principal. Prácticamente no existe diferencia entre un procedimiento y una función, la diferencia radica en el significado lógico de estas rutinas: las funciones se suelen utilizar para calcular algún valor y los procedimientos, 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 debemos olvidarnos 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, el cual no debe coincidir con ninguna palabra reservada del lenguaje Visual Basic, luego se indican las variables que serán pasadas a la subrutina como parámetros - especificando variables en esta construcción significa asignar celdas de memoria para las variables de subrutina (variables de declaración para la función). En el cuerpo del subprograma, la estructura del script no es diferente de la de un programa normal (aquí puede declarar variables adicionales, realizar operaciones, utilizar otras funciones y procedimientos, al final del cuerpo debe haber un operador que asigne un); función a algún valor: este valor se devolverá al programa principal. Puede interrumpir la ejecución de una función utilizando la instrucción Exit Function, pero en este caso debe recordar asignar algún valor a la función; de lo contrario, el script arrojará un error. La función finaliza con la instrucción End Function.

Definición de función

Función () Si Entonces = Salir de la función Finalizar si = Función final

Llamar a una 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 existe una declaración de asignación antes de salir del procedimiento. Puede interrumpir la ejecución del procedimiento utilizando el comando Salir Sub, y toda la construcción finaliza con el operador End Sub. Para llamar a un procedimiento en el programa principal, debe utilizar la palabra clave Llamar y el nombre de la función con los argumentos necesarios. (La palabra clave Call es opcional, pero recomiendo usarla para evitar llamadas a procedimientos incorrectos).

Definición del procedimiento

Sub () Si Entonces Salir del final secundario si Subtítulo final

Llamar a un procedimiento

()

Por cierto, los procedimientos y funciones deben ubicarse al final del script.

Mientras se ejecuta 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 principales del script, 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 (Por referencia [, argumentos]) = Subtítulo final

En este caso el argumento pasado por referencia a una celda de memoria: el valor de la variable cambia en el script principal. En otras palabras, utilizando el parámetro ByRef, el procedimiento se convierte en una función: la subrutina devuelve el resultado de los cálculos al programa principal.

Manejo de errores de ejecución de scripts

De forma predeterminada, el script procesa todos los errores automáticamente y, si se produce un error, el script deja de ejecutarse. Para deshabilitar el manejo automático de errores, debe usar la directiva especial On Error Resume Next, que deshabilita el manejo automático de errores y continúa el script incluso si hay errores. Para manejar errores manualmente, debe acceder al 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 el objeto Err; Raise" llamando a un error de prueba.

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 puntuación = " & CStr(iAvarage) Caso 11 " división por cero;

WScript.Echo "El número de pruebas no puede ser cero" Caso 13 "no coincide el tipo; WScript.Echo "Ingresó un valor no numérico "Case De lo contrario" no hay errores;

WScript.Echo "Error desconocido WScript.Quit" Seleccionar fin

Objetos, sus métodos y propiedades.

Los scripts VBS, al igual que su padre Visual Basic, son 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 la estructura de los objetos. Un objeto significa algo que tiene un determinado comportamiento y forma de representación; un objeto es una instancia de una clase. Una clase se puede comparar con un modelo según el cual se crean los objetos. Normalmente, las clases se diseñan de tal manera que sus objetos correspondan a los objetos del dominio. Entonces, para trabajar con un objeto, primero debes crearlo usando clases de la biblioteca requerida: .)

Colocar

Una clase es un tipo que describe la estructura de los objetos. Un objeto significa algo que tiene un determinado comportamiento y forma de representación; un objeto es una instancia de una clase. Una clase se puede comparar con un modelo según el cual se crean los objetos. Normalmente, las clases se diseñan de tal manera que sus objetos correspondan a los objetos del dominio. = CrearObjeto(

Puedes eliminar un objeto asignándole el valor Nada:

. = Nada .(Todos los objetos con los que trabaja Windows Script Host tienen métodos y propiedades. Para acceder a un método, debe especificar un objeto, seguido de un punto: un método con los parámetros necesarios.

[, Param2, ..., ParamN] Llamar

. = . = . = .

Ejemplo. Crear un objeto del sistema de archivos, llamar al método de creación de carpetas y eliminar el objeto.

Establecer oFSO = CreateObject("Scripting.FileSystemObject") Llamar a oFSO.CreateFolder("C:\Test") Establecer oFSO = Nada

Tenga en cuenta que el término "objeto" se refiere a la lógica del script, no a la lógica del sistema de archivos. Es decir, cuando decimos "eliminar un objeto", nos referimos a un objeto de script lógico que no afecta de ninguna manera la eliminación de ninguna parte del sistema de archivos.

Para saber 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:

  1. Inicie MS Word.
  2. En el menú principal seleccione Herramientas -> Macro -> Editor Visual Bacis
  3. En la ventana de edición de macros, seleccione Ver -> Explorador de objetos

Si una biblioteca no se refleja en la lista, se puede conectar a través del menú Herramientas -> Referencias.

Los scripts tienen métodos que no forman parte de ninguna clase; están disponibles directamente en el cuerpo del script:

cuadro de mensajes( [, Params]) " muestra un mensaje de ventana en la pantalla; InputBox( [, Params]) " muestra el cuadro de diálogo en la pantalla.

Un ejemplo de cómo mostrar un cuadro de diálogo solicitando texto y luego mostrar un mensaje en la ventana con el texto ingresado.

MyValue = InputBox("Ingrese texto", "Primera ventana", "El texto debe ingresarse aquí") MyResult = MsgBox(MyValue, 1, "Segunda ventana")

Métodos y propiedades de la clase raíz de WScript

Los métodos y propiedades de la clase raíz de WScript no requieren la creación de un objeto; están automáticamente disponibles para su uso directamente en el cuerpo del script.

CrearObjeto( .) " creación de objetos; GetObject( ) " conectar un objeto desde un archivo; ConnectObject( , ) "conectarse a eventos de un objeto existente; DisconnectObject( ) "desconectarse de los eventos del objeto; Echo() " muestra un mensaje en la pantalla; Argumentos " devuelven una serie de argumentos de la línea de comandos del script; Nombre " devuelve el nombre del intérprete del script; Ruta " devuelve la ruta al intérprete de guiones; Nombre Completo " devuelve el nombre completo del intérprete de guiones; Versión " devuelve la versión del intérprete de script; BuildVersion " devuelve la versión de compilación del intérprete de script; ScriptName "devuelve el nombre del archivo de script; ScriptFullName" devuelve el nombre completo del archivo de script; Interactivo " establece o devuelve el modo interactivo del script; Dormir( ) "pausa el trabajo durante el número especificado de milisegundos; Salir "termina el script.

Discutiremos el uso de estos métodos y propiedades con más detalle en ejemplos de otras clases.

Métodos y propiedades de la clase Shell.

Para trabajar con el sistema operativo, se utiliza una clase Shell especial, que le permite realizar operaciones como iniciar programas, cambiar 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( ) " devuelve el valor de la variable del sistema solicitada; EnviEnvironment( ) " devuelve una matriz de variables del sistema; CreateShortcut( ) "creando un acceso directo; Popup( [, Params]) " muestra un mensaje de ventana en la pantalla; RegRead( ) "leer un valor del registro; RegWrite( ,[, Tipo]) " escribiendo un valor en el registro; RegDelete( ) " eliminando un valor del registro; LogEvent( ,) "grabar evento en el registro del sistema; Ejecutar( [, Params]) "ejecutando un programa en un nuevo proceso; Exec( ) "iniciar un programa en una consola secundaria; AppActivate( ) "activación de ventana; SendKeys( <Keys>) " envía caracteres a la ventana activa; CurrentDirectory " establece o devuelve el directorio actual; SpecialFolders() "devuelve una serie de carpetas de servicios o la ruta" de la carpeta de servicios solicitada.</p><p>Ejemplo. Usando métodos y propiedades de la clase Shell.</p><p>" Creando un objeto de la clase Shell Set oShell = Wscript.CreateObject("WScript.Shell") " Ejecutando la calculadora oShell.Run("Calc.exe") " Retraso WScript.Sleep(100) " Ejecutando el bloc de notas oShell.Run ("Notepad.exe ") " Delay WScript.Sleep(100) " Cambiar a la ventana de la calculadora oShell.AppActivate "Calculator" " Delay WScript.Sleep(100) " Simular pulsaciones de teclas oShell.SendKeys("1(+)2(= )") " Recibir ruta al escritorio sDesktopPath = oShell.SpecialFolders("Desktop") " Crear un objeto de acceso directo Establecer oLink = oShell.CreateShortcut(sDesktopPath & "\Test.lnk") " Configurar un acceso directo oLink.TargetPath = WScript .ScriptFullName oLink.WindowStyle = 1 oLink .Hotkey = "CTRL+SHIFT+T" oLink.IconLocation = "notepad.exe,0" oLink.Description = "Enlace de prueba" oLink.WorkingDirectory = sDesktopPath oLink.Save " Creando un objeto de entorno y obtener las propiedades del sistema Set oSysEnv = oShell.Environment("SYSTEM") " Mostrar un mensaje sobre la cantidad de procesadores en la pantalla MyResult = oShell.Popup("Número de procesadores: " & oSysEnv("NUMBER_OF_PROCESSORS"), _ 3, "Mensaje", 0) "Obtiene la ruta de la carpeta de Windows y muestra un 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") " Escribe un valor de cadena en el registro MyResult = oShell.RegWrite( "HKCU\ScriptEngine\Value", "My Value") " Escribe un valor numérico en el registro MyResult = oShell.RegWrite("HKCU\ScriptEngine\Key", 1, "REG_DWORD") " Eliminación de una clave de registro MyResult = oShell. RegDelete("HKCU\ScriptEngine\") " Escribir un evento en el registro del sistema MyResult = oShell.LogEvent(0, "Script de prueba completado")</p><h3>Métodos y propiedades de la clase Network.</h3> <p>Como ya hemos visto, los scripts VBS pueden funcionar con el shell de Windows, pero ésta no es su única capacidad. Con la clase Red, puede acceder y administrar objetos de red. Echemos un vistazo más de cerca a la clase Red:</p><p>ComputerName "devuelve el nombre de la computadora; UserDomain" devuelve el nombre de dominio; UserName " devuelve el nombre de usuario; EnumNetworkDrives " devuelve una lista de unidades de red asignadas; MapNetworkDrive( <LocalName>, <RemoteName>, ) "conectando un recurso de red; RemoveNetworkDrive( <Name>, , ) "deshabilitar un recurso de red; EnumPrinterConnections" devuelve una lista de impresoras de red; Agregar conexión de impresora de Windows ( <PrinterPath>) "conectando una impresora de red; AddPrinterConnection( <LocalName>, <RemoteName>[, UpdateProfile, Usuario, Contraseña] " conecte una impresora de red al puerto especificado; RemovePrinterConnection( <Name>[,Force, UpdateProfile]) " deshabilitar una impresora de red; SetDefaultPrinter( <PrinterName>) "seleccione la impresora predeterminada;</p><p>Ejemplo. Utilizando métodos y propiedades de la clase Network.</p><p>" Creando un objeto de la clase Network Set oNetwork = WScript.CreateObject("WScript.Network") " Mostrando un mensaje sobre el nombre de la computadora WScript.Echo "Computer Name = " & oNetwork.ComputerName " Mostrando un mensaje sobre el nombre de la usuario actual WScript.Echo "User Name = " & oNetwork.UserDomain & "\" & oNetwork.UserName " Asignación de una unidad de red oNetwork.MapNetworkDrive "Z:" "\\Server\Share" " Obtención de una colección de unidades de red asignadas Establecer oDrives = oNetwork.EnumNetworkDrives " Mostrando 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 " Quitar una unidad de red oNetwork.RemoveNetworkDrive "Z:" " Conectar una impresora de red oNetwork.AddPrinterConnection "LPT1", "\\Server\Printer" " Configurar la impresora predeterminada oNetwork.SetDefaultPrinter "\\Server\Printer" " Obtener una colección de impresoras conectadas Establecer oPrinters = oNetwork.EnumPrinterConnections</p><h3>Métodos y propiedades de la clase FileSystemObject.</h3> <p>Muy a menudo, en escenarios, hay casos en los que es necesario crear, eliminar, mover o cambiar algo en el disco de la computadora. Este problema puede resolverse mediante la clase FileSystemObject, diseñada para funcionar con el sistema de archivos. Los siguientes son los objetos que esta clase puede crear:</p> <ul><li>FileSystemObject: el objeto principal que le permite crear, eliminar, administrar discos, carpetas y archivos en general;</li> <li>Unidad: un objeto que le permite recopilar información sobre las unidades del sistema;</li> <li>Unidades: un objeto que almacena una lista de unidades del sistema;</li> <li>Carpeta: un objeto que le permite crear, eliminar, mover carpetas, así como recopilar información sobre ellas y su contenido;</li> <li>Carpetas: un objeto que almacena una lista de subcarpetas de la carpeta especificada;</li> <li>Archivo: un objeto que le permite crear, eliminar, mover archivos y recopilar información sobre ellos;</li> <li>Archivos: un objeto que almacena una lista de archivos en la carpeta especificada;</li> <li>TextStream es un objeto que le permite leer y crear archivos de texto.</li> </ul><p>Métodos y propiedades de la clase FileSystemObject (objeto principal):</p><p>Ruta de construcción ( <Path>, <Name>) " agrega un nombre a la ruta especificada; GetAbsolutePathName( <PathSpec>) " devuelve la ruta completa; GetBaseName( <Path>) " devuelve el nombre de la carpeta o archivo (sin la extensión ") en la ruta especificada; ObtenerDrive( <DriveSpec>) " crea un objeto Drive; GetDriveName( <Path>) " devuelve el nombre de la unidad en la ruta especificada; GetExtensionName( <Path>) " devuelve la extensión del archivo en la " ruta especificada; Obtener archivo ( <FileSpec>) " crea un objeto Archivo; GetFileName( <PathSpec>) " devuelve el nombre del archivo (sin extensión) " en la ruta especificada; Obtener carpeta ( <FolderSpec>) " crea un objeto Carpeta; GetParentFolderName( <Path>) " devuelve el nombre de la carpeta en la que " se almacena el archivo o carpeta en la ruta especificada; Obtenercarpeta especial( <FolderSpec>) " crea un objeto Carpeta en la " carpeta de servicio especificada; GetTempName " devuelve un nombre de archivo generado aleatoriamente; La unidad existe ( <DriveSpec>) " comprueba la existencia del disco; FolderExists( <FileSpec>) " comprueba la existencia de una carpeta; CopyFolder( <Source>, <Destination>[, Sobrescribir]) " copia la carpeta; MoveFolder( <Source>, <Destination>) " mueve una carpeta; DeleteFolder( <FolderSpec>[, Force]) " elimina una carpeta; CreateFolder( <FolderName>) " crea una carpeta; FileExists( <Filespec>) " comprueba la existencia del archivo; CopyFile( <Source>, <Destination>[, Sobrescribir]) " copia el archivo; MoveFile( <Source>, <Destination>) "mueve un archivo; DeleteFile( <FileSpec>[, Force]) " elimina el archivo; CreateTextFile( <FileName>[, Sobrescribir, UnioCode]) " crea un archivo de texto; OpenTextFile( <FileName>[, IOMode, Create, Format]) " abre un archivo de texto para lectura o " escritura.</p><p>Los objetos Unidades, Carpetas y Archivos de la clase FileSystemObject almacenan información sobre unidades, carpetas y archivos y se utilizan principalmente para recopilar información sobre el sistema de archivos. Tienen sólo dos propiedades:</p><p>Count " devuelve el número de elementos de la colección; Item( <ObjectName>) " devuelve un registro con el índice especificado de la colección (no utilizado), " se utiliza un bucle For Each para iterar a través de los elementos de la colección.</p><p>Para dejar más claro qué es una colección de objetos, considere un ejemplo de visualización de una lista de archivos en la raíz de la unidad C:</p><p>" Crear un objeto de la clase FileSystemObject Set oFSO = CreateObject("Scripting.FileSystemObject") " Crear una carpeta Establecer objeto oFolder = oFSO.GetFolder("C:\") " Obtener una colección de archivos Set oFilesCollection = oFolder.Files " Obtener el número de elementos en la colección sResult = sResult & oFilesCollection.Count & " files in C:\" & vbCrLf " Leer los atributos de cada archivo de la colección para cada oFile en oFilesCollection sResult = sResult & oFile.Name & vbTab sResult = sResult & oFile.Size & vbCrLf Next "Envía el resultado a la pantalla MsgBox(sResult)</p><p>El objeto Drive proporciona acceso a las propiedades de una unidad local o de red:</p><p>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 la disponibilidad del disco; Path " devuelve la ruta al disco; RootFolder " crea un objeto Carpeta que apunta a la raíz del disco; SerialNumber " devuelve el número de serie del disco; ShareName " devuelve el nombre de red del disco; TotalSize " devuelve la capacidad del disco en bytes; VolumeName " devuelve o establece la etiqueta del disco.</p><p>El objeto Carpeta proporciona acceso a todas las propiedades de una carpeta y también le permite realizar acciones en ella:</p><p>Atributos " devuelve los atributos de la carpeta; FechaCreada " devuelve la fecha de creación de la carpeta; DateLastAccessed " devuelve la fecha en que se accedió a la carpeta por última vez; DateLastModified " devuelve la fecha en que se modificó la carpeta; Unidad " devuelve la letra de unidad de la carpeta; Archivos " devuelve la colección de archivos de la carpeta; IsRootFolder " devuelve True si la carpeta es la raíz del disco; Nombre " devuelve el nombre de la carpeta; ParentFolder " crea un objeto Carpeta que apunta a " la carpeta principal; Ruta " devuelve la ruta de la carpeta; Nombre Corto " 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; Copiar( <Destination>[, Sobrescribir]) " copia la carpeta; Mover( <Destination>) " mueve la carpeta; Eliminar( <Force>) " elimina la carpeta; CreateTextFile( <FileName>[, Sobrescribir, UniCode]) " crea un archivo de texto en la carpeta.</p><p>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:</p><p>Atributos " devuelve los atributos del archivo; FechaCreada " devuelve la fecha de creación del archivo; DateLastAccessed " devuelve la fecha en que se accedió al archivo por última vez; DateLastModified " devuelve la fecha en que se modificó el archivo; Unidad " devuelve la letra de la unidad del archivo; Nombre " devuelve el nombre del archivo; ParentFolder " crea un objeto Carpeta que apunta a " la carpeta principal; Ruta " devuelve la ruta al archivo; Nombre Corto " 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; Escriba " devuelve el tipo de archivo; Copiar( <Destination>[, Sobrescribir]) " copia el archivo; Mover( <Destination>) "mueve el archivo; Eliminar( <Force>) " elimina un archivo; OpenAsTextStream() " abre un archivo de texto para lectura o escritura.</p><p>El objeto TextStream es una herramienta para acceder al contenido de un archivo. Puedes usarlo para leer y modificar un archivo:</p><p>AtEndOfLine " muestra si se ha llegado al final de la línea; AtEndOfStream " muestra si se ha llegado al 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( <CharactersNumber>) "lee el número especificado de caracteres, comenzando desde la posición " del cursor de lectura; ReadAll " lee el archivo completo; ReadLine " lee la línea donde se encuentra el cursor de lectura; Saltar( <CharactersNumber>) " salta el número especificado de caracteres, comenzando desde la posición " del cursor de lectura; SkipLine " salta la línea donde se encuentra el cursor de lectura; Write( <String>) " escribe una línea; WriteLine( <String>) " escribe una línea y mueve el cursor de escritura a la siguiente línea; WriteBlankLines( <Lines>) " escribe el número especificado de líneas vacías.</p><p>Nos familiarizamos con todos los métodos y propiedades de la clase FileSystemObject, veamos un ejemplo del uso de esta clase:</p><p> " Configurar códigos constantes para carpetas del sistema Const WindowsFolder = 0 Const SystemFolder = 1 Const TemporaryFolder = 2 " Configurar códigos constantes para tipos de acceso a un archivo de texto Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 " Crear un objeto de la clase FileSystemObject Set oFSO = CreateObject(" Scripting.FileSystemObject") " Recuperar una 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.DriveLetter & ": " Si oDrive.DriveType = Remote Then sResult = sResult & oDrive.ShareName & vbCrLf ElseIf oDrive.IsReady Then sResult = sResult & oDrive.VolumeName & vbCrLf Else sResult = sResult & vbCrLf End If Next " Mostrando los resultados Wscript.Echo(sResult) " Crear un objeto de unidad C: Establecer oDrive = 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 & "Red - " Caso 4: sResult = sResult & "CD-ROM - " Caso 5: sResult = sResult & "Disco RAM - " End Select " Determina si un disco está disponible y obtiene sus propiedades. Si oDrive.IsReady Entonces sResult = sResult & "Ready" & vbCrLf sResult = sResult & "FileSystem is " & oDrive.FileSystem & vbCrLf sResult = sResult & "Espacio disponible: " & _ FormatNumber( oDrive.AvailableSpace/1024, 0) & " Kbytes" Else sResult = sResult & "No listo" End If " Mostrando resultados en la pantalla Wscript.Echo(sResult) " Creando un servicio objeto de carpeta (carpeta de archivos temporales de Windows) Set oTempFolder = oFSO. GetSpecialFolder(TemporaryFolder) " Cree un objeto de archivo de texto (y créelo en la raíz de la unidad C:) Set oFile = oFSO.CreateTextFile("C:\TestFile.txt ", True) " Escribe en un archivo de texto oFile.WriteLine("Esto es una prueba.") oFile.WriteLine(sResult) " Cierra un archivo de texto y lo libera para otros procesos oFile.Close " Comprueba la presencia de un archivo en la carpeta de archivos temporales de Windows, elimina el archivo If oFSO.FileExists(oFSo.BuildPath(oTempFolder.Path, "TestFile.txt")) Entonces _ oFSO.DeleteFile(oFSo.BuildPath(oTempFolder.Path, "TestFile.txt") ) " Crear un objeto de archivo Set oFile = oFSO.GetFile("C:\TestFile.txt") " Mover el archivo a la carpeta de archivos temporales de Windows oFile.Move(oFSo.BuildPath(oTempFolder.Path, "TestFile.txt")) " Cambiando el atributo del archivo Si oFile.Attributes y 32 Luego oFile. Atributos = 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 " Crea un objeto de secuencia abriendo un archivo para leer Set oTestFile = oFSO.OpenTextFile(oFile.Path, ForReading, False) " Lee una secuencia hasta encontrar su final Do While oTestFile.AtEndOfStream<>True sResult = sResult & oTestFile.ReadLine Loop " Cierra un archivo de texto y lo libera para otros procesos oTestFile.Close " Imprime un mensaje en la pantalla Wscript.Echo(sResult)</p><h3>Escenario "Eliminar archivos antiguos"</h3> <p>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: estructura del script, denominación de variables, trabajo con matrices y colecciones, manejo manual de errores, lectura de variables del sistema, creación de un archivo de texto para registrar el script, trabajo con el sistema de archivos. , utilizando procedimientos.</p><p> " ==== 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 archivos temporales obsoletos de la computadora " == == Lógica principal del script ==== " Habilitar el manejo manual de errores al reanudar con error Siguiente " Intervalo de tiempo constante cuando los archivos se consideran obsoletos Const PurgeTime = 14 " días " Excepciones: perfiles de usuario que no deben procesarse Dim aExceptions(3) aExceptions( 0) = "Usuario predeterminado" aExceptions(1) = "LocalService" aExceptions(2) = "NetworkService" aExceptions(3) = "Todos los usuarios" " Creación de objetos de shell y sistema de archivos Set oShell = CreateObject("wscript.shell") Set oFSO = CreateObject ("Scripting.Filesystemobject") " Definición de rutas de carpetas de servicio sProgramFiles = oShell.ExpandEnvironmentStrings("%ProgramFiles%") sWinDir = oShell.ExpandEnvironmentStrings("%WinDir%") sWinTempFolder = sWinDir & "\Temp" sDocuments = "C:\ Documents and Settings" " Creación de un archivo de registro de script sLogFileName = sWinTempFolder & "\PurgeTemp_" & Date sLogFileName = Reemplazar(sLogFileName, ".", "_") sLogFileName = Reemplazar(sLogFileName, "/", "_ ") Establecer oLogFile = oFSO.CreateTextFile(sLogFileName & ".log",true) oLogFile.WriteLine "========== Iniciar la purga ==========" " Limpiar Windows carpeta temporal oLogFile.WriteLine vbCrLf & "========== Carpeta temporal de Windows ==========" PurgeFolder(sWinTempFolder) " Limpieza de la carpeta temporal del perfil de usuario y archivos de Internet oLogFile. WriteLine vbCrLf & _ "===== ===== Carpeta temporal de usuarios y Archivos temporales de Internet de usuarios ==========" Establecer oDocuments = oFSO.GetFolder(sDocuments) Establecer colProfiles = oDocuments.SubFolders para Cada oProfile en colProfiles bFlag = false Para cada sException en aExceptions si InStr(oProfile.Path,sException) > 0 entonces bFlag = true salir para finalizar si Next Si bFlag = False Entonces PurgeFolder(oProfile.Path & "\Local Settings\Temp" ) PurgeFolder(oProfile.Path & "\Configuración local\Archivos temporales de Internet") Finalizar si es siguiente " Borrar la cuarentena de NOD32 oLogFile.WriteLine vbCrLf & "========== Cuarentena de NOD32 ======== ==" sQuarantine = sProgramFiles & "\Eset \Infected" PurgeFolder(sQuarantine) " Cerrando el archivo de registro oLogFile.WriteLine vbCrLf & "========== Detener la purga ========== " oLogFile.Close " Procedimiento PurgeFolder: eliminación de archivos antiguos Sub PurgeFolder(sFolderPath) " Creación de una carpeta Establecer objeto oFolder = oFSO.GetFolder(sFolderPath) " Recuperar una colección de archivos Establecer colFiles = oFolder. Archivos " Procese cada archivo de la colección Para cada oFile en colFiles " Compruebe si el archivo está desactualizado Si (Date-oFile.DateLastModified) > PurgeTime y (Date-oFile.DateCreated) > _ PurgeTime Luego " Escriba un mensaje al registro de script oLogFile.Writeline oFile.Path & vbTab & oFile.DateCreated " Eliminación de un archivo obsoleto oFSO.DeleteFile oFile.Path, True " Comprobando errores si err.Number<>0 y luego " Escriba un mensaje de error en el registro del script oLogFile.Writeline "-----> Error # " & CStr(Err.Number) _ & " " & Err.Description " Borre el error Err.Clear finalice si " Pausa 20 milisegundos WScript.Sleep 20 End if Next " Recibir una colección de subcarpetas Set colSubFolders = oFolder.SubFolders " Procesar cada subcarpeta para cada oSubFolder en colSubFolders " Llamar recursivamente al procedimiento para eliminar archivos antiguos; la subrutina llama a " ella misma PurgeFolder(oSubFolder.Path ) " Comprobar el tamaño de la carpeta Si oSubFolder.Size = 0 Entonces " Escriba un mensaje en el registro del script oLogFile.Writeline oSubFolder.Path & vbTab & oSubFolder.DateCreated " Eliminar una carpeta vacía oFSO.DeleteFolder oSubFolder.Path " Compruebe si hay errores Si es err .Número<>0 y luego " Escriba un mensaje de error en el registro del script oLogFile.Writeline "-----> Error # " & CStr(Err.Number) _ & " " & Err.Description " Borre el error Err.Clear End if End if Siguiente final sub</p><p>Hasta ahora hemos aprendido los conceptos básicos de Visual Basic Script. Resumamos y determinemos las ventajas y desventajas de tales escenarios:</p> <ul><li>los scripts no requieren compilación y su código se puede editar en cualquier momento;</li> <li>Los scripts VBS tienen una funcionalidad prácticamente ilimitada y pueden utilizar varias bibliotecas del sistema y objetos de otras aplicaciones;</li> <li>Los archivos VBS se pueden ejecutar en consola o en modo ventana, por lo que el usuario puede controlar la visibilidad del progreso del script;</li> <li>Los scripts VBS le permiten utilizar procedimientos y funciones personalizados;</li> <li>este lenguaje es ideal para trabajar con variables numéricas y de cadena, fechas, así como para procesar archivos de texto, gestión de sistemas y dominios;</li> <li>Los scripts VBS son difíciles de escribir y requieren habilidades de programación;</li> <li>Estos scripts sólo funcionan en sistemas operativos Windows.</li> </ul><p>Vitali Bochkarev</p> <h2>Enlaces externos</h2> <p>Sección de enlaces externos, es decir, enlaces a otros sitios con los que este recurso no tiene relación. Además, el propietario del sitio no asume ninguna responsabilidad por la disponibilidad de estos recursos y su contenido.</p> <p>De alguna manera me adelanté por completo y no te hablé de dos <b>Funciones del cuadro de diálogo: MsgBox y InputBox</b>. En esta muy breve lección te hablaré de todos los gadgets para estas dos funciones. También hay otras formas de crear cuadros de diálogo, pero esto requerirá <b>Objetos WSH</b>, que se discutirá en las siguientes lecciones.</p> <h2>Función cuadro de mensajes</h2> <p>La función más común para mostrar un mensaje. Por supuesto que es más complicado que <b>Hacer eco de un objeto WScript</b>, pero ella tampoco necesita el objeto. <br><i>Sintaxis:</i> <b>MsgBox (Mensaje[, Botones][, Título][, Archivo de ayuda, Contexto])</b></p> <ul><li><b>Inmediato</b>— Texto del mensaje.</li> <li><b>Botones</b>— Botones mostrados y modo de ventana.</li> <li><b>Título</b>- Nombre de la ventana.</li> <li><b>Archivo de ayuda</b>— archivo de ayuda (*.hlp)</li> <li><b>Contexto</b>— Número de sección de ayuda.</li> </ul><p>Parámetro <b>Botones</b> puede tomar simultáneamente varios valores. Para indicarlos utilice el signo “+” o simplemente utilice la suma de los valores. Los valores de este parámetro se dan a continuación.</p> <h3>Constantes para cuadros de diálogo (botones de visualización):</h3> <ul><li><b>vbOKSolo</b>— Valor 0. Muestra el botón Aceptar.</li> <li><b>vbOKCancelar</b>— Valor 1. Botones de visualización: Aceptar y Cancelar.</li> <li><b>vbAbortRetryIgnorar</b>— Valor 2. Botones de visualización: Abortar, Repetir y Saltar.</li> <li><b>vbSíNoCancelar</b>— Valor 3. Botones de visualización: Sí, No y Cancelar.</li> <li><b>vbSíNo</b>— Valor 4. Botones de visualización: Sí y No.</li> <li><b>vbReintentarCancelar</b>— Valor 5. Botones de visualización: Repetir y Cancelar.</li> </ul><h3>Constantes para cuadros de diálogo (iconos mostrados):</h3> <ul><li><b>vbCrítico</b>— Valor 16. Muestra el icono de marca de parada.</li> <li><b>vbPregunta</b>— Valor 32. Muestra el icono del signo de interrogación.</li> <li><b>vbExclamación</b>— Valor 48. Muestra el icono del signo de exclamación.</li> <li><b>vbInformación</b>— Valor 64. Muestra el icono de marca de información.</li> </ul><h3>Constantes para cuadros de diálogo (botones predeterminados):</h3> <ul><li><b>vbDefaultButton1</b>— Valor 0. El primer botón está seleccionado de forma predeterminada.</li> <li><b>vbDefaultButton2</b>— Valor 256. El segundo botón está seleccionado de forma predeterminada.</li> <li><b>vbDefaultButton3</b>— Valor 512. El tercer botón está seleccionado de forma predeterminada.</li> <li><b>vbDefaultButton4</b>— Valor 768. El cuarto botón está seleccionado de forma predeterminada.</li> </ul><h3>Constantes para cuadros de diálogo (modo ventana):</h3> <ul><li><b>vbAplicaciónModal</b>— Valor 0. Se muestra en modo modal.</li> <li><b>vbSistemaModal</b>— Valor 4096. Se muestra en modo modal y se coloca encima de todas las aplicaciones.</li> </ul><h3>Otro:</h3> <ul><li><b>Valor 262144</b>- Encima de todas las ventanas.</li> <li><b>Valor 524288</b>— El texto de la ventana se muestra en el borde derecho.</li> </ul><p>Vale la pena señalar que el parámetro <b>Botones</b> No se pueden aceptar múltiples valores de la misma categoría. Estos valores simplemente se sumarán. Es decir, no podrás instalar varios conjuntos de botones o iconos al mismo tiempo.</p> <p>"Lección VBScript nº 16: "Función 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"</p> <table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums " data-settings="show"> </td> <td class="crayon-code"><p>"******************************************************** </p><p>"Lección de VBScript n.º 16:</p><p>"Función MsgBox y InputBox</p><p>"archivo_1.vbs</p><p>"******************************************************** </p><p>MsgBox "Hola", 5 + 16, "Título"</p><p>MsgBox "Hola", vbRetryCancel + 16, "Título"</p><p>MsgBox "Hola", vbRetryCancel + 524288, "Título"</p><p>MsgBox "Hola", vbAbortRetryIgnore + vbInformation + vbDefaultButton2 + vbSystemModal + 524288, "Título"</p><p>MsgBox "Hola", 528706, "Título"</p> </td> </tr></table><p>Además, la función MsgBox puede devolver el resultado de los clics en los botones. Se puede asignar a una variable y de esta manera determinar el botón presionado.</p> <h3>Devuelve el resultado de los botones presionados (constantes):</h3> <ul><li><b>vbOK</b>— Valor 1. Botón Aceptar.</li> <li><b>vbCancelar</b>— Valor 2. Botón Cancelar.</li> <li><b>vbAbortar</b>— Valor 3. Botón cancelar.</li> <li><b>vbReintentar</b>— Valor 4. Botón repetir.</li> <li><b>vbIgnorar</b>— Valor 5. Botón saltar.</li> <li><b>vbSí</b>— Valor 6. Botón Sí.</li> <li><b>vbNo</b>— Valor 7. Sin botón.</li> </ul><p>"*************************************************** ******* "Lección 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 Entonces MsgBox "Presionaste el botón - Abortar" ElseIf Botón = 4 Luego MsgBox "Presionaste el botón - Repetir" De lo contrario MsgBox "Presionaste el botón - Omitir" Fin si</p> <p>"*************************************************** ******* "Lección n.º 16 de VBScript: "Función MsgBox y InputBox "file_4.vbs"************************** *********** ******************************* Dim Dict, AboutBomb Set Dict = CreateObject(" Scripting.Dictionary") Dict.CompareMode = 1 Dict .Add "Amarillo", "¡La bomba ha explotado!" Dict.Add "Rojo", "¡Has desactivado la bomba!" Dict.Add "Azul", "La bomba ha explotó!" InputBox("¡¡¡Bomba detectada!!! ¿Qué cable debe cortar: amarillo, rojo, azul o verde??","¡¡¡Bomba detectada!!!","Ingrese el color del cable aquí...") If Dict.Exists (AboutBomb) luego MsgBox Dict.Item(AboutBomb) else MsgBox "¡Tu vista es mala! ¡No existe tal cable! ¡¡¡La bomba explotó!!!" fin si</p> <table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums " data-settings="show"> </td> <td class="crayon-code"><p>"******************************************************** </p></td></tr></table> <h3>Tipos de datos</h3> <p>El lenguaje VBScript utiliza un único tipo de datos: Variante, 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 utilizando un conjunto de funciones: <a href="https://neonkaraoke.ru/es/gs/wiki/index.php/VBScript._%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F_VarType" title="VBScript. Función tipovar">Tipo de Var</a>, TypeName, IsArray, IsDate, IsEmpty, IsNull, IsNumeric, IsObject, que se analizarán a continuación. El tipo de información contenida también se denomina subtipo variante. En la siguiente tabla se proporciona una lista completa de subtipos:</p> <table class="wikitable" border="1"><tr><th>Subtipo</th> <th>Descripción</th> </tr><tr><td>Vacío</td> <td>A la variable no se le ha asignado un valor. Cuando se utiliza una variable no inicializada en expresiones numéricas, se sustituirá 0 y, en expresiones de cadena, se sustituirá una cadena vacía.</td> </tr><tr><td>Nulo</td> <td>La variable no contiene datos.</td> </tr><tr><td>Booleano</td> <td>Una variable booleana puede tomar los valores Verdadero o Falso.</td> </tr><tr><td>Byte</td> <td>Un número entero que va de 0 a 255.</td> </tr><tr><td>Entero</td> <td>Un número entero en el rango -32.768 a 32.767.</td> </tr><tr><td>Divisa</td> <td>Un número de punto fijo en el rango -922.337.203.685.477,5808 a 922.337.203.685.477,5807.</td> </tr><tr><td>Largo</td> <td>Un número entero en el rango -2.147.483.648 a 2.147.483.647.</td> </tr><tr><td>Soltero</td> <td>Número de coma flotante de precisión simple. Para valores negativos el rango aceptable es <p>de -3.402823E38 a -1.401298E-45. Para los positivos, de 1.401298E-45 a 3.402823E38.</p> </td> </tr><tr><td>Doble</td> <td>Número de coma flotante de doble precisión. Para valores negativos, el rango aceptable es de <p>79769313486232E308 a -4.94065645841247E-324. Para los positivos: de 4.94065645841247E-324 a 1.79769313486232E308.</p> </td> </tr><tr><td>Fecha (hora)</td> <td>Contiene un número que representa una fecha en el rango del 1 de enero de 100 al 31 de diciembre de 9999.</td> </tr><tr><td>Cadena</td> <td>Secuencia de personajes. La longitud máxima es de unos 2 mil millones de caracteres.</td> </tr><tr><td>Objeto</td> <td>Objeto.</td> </tr><tr><td>Error</td> <td>Número de error.</td> </tr></table><p>Dependiendo de la expresión en la que esté involucrada la variable, su contenido se convertirá automáticamente al tipo deseado. Considere este ejemplo:</p><p>Opción Subtest explícitoVBScript Dim A, B A = 5 B = "12" Application.MessageBox A + B, "", vbOkOnly End Sub</p><p>Dado que la expresión involucra una variable numérica <b>A</b>, el intérprete convierte el valor de la variable <b>B</b> de cuerda <b>"12" </b> en un número y los resume:</p><p>Cambiemos la macro para que la variable <b>A</b> también contenía la línea:</p><p>Opción Subtest explícitoVBScript Dim A, B A = "5" B = "12" Application.MessageBox A + B, "", vbOkOnly End Sub</p><p>Ejecutémoslo. Ahora aparecerá en pantalla el resultado de la fusión (concatenación) de dos cadenas, y no la suma de sus representaciones numéricas:</p><p><img src='https://i1.wp.com/gsbelarus.com/gs/images/gs/2009/book/VBScript.DataTypes.2.png' height="100" width="118" loading=lazy loading=lazy></p><p>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.</p><p>Si el resultado de la expresión debe ser una concatenación de cadenas, y no la suma de sus representaciones numéricas, entonces se debe utilizar el operador & en lugar de +.</p> <h3>variables</h3> <p>Una variable es una representación simbólica conveniente de un área de memoria donde una aplicación almacena algunos datos. Durante la ejecución de la aplicación, el valor de una variable puede cambiar. Antes de su uso, se debe declarar una variable mediante la declaración Dim.</p><p>Usando un operador, puede declarar varias variables a la vez, si enumera sus nombres separados por comas:</p><p>Atenuar izquierda, derecha, arriba, abajo</p><p>Al declarar, no es necesario especificar el tipo de datos, ya que todas las variables son de tipo Variante.</p><p><i>Si la opción explícita no se especifica en la primera línea del texto del script, entonces las variables se pueden usar sin declaración. Pero este camino puede conducir a errores difíciles de detectar. Basta con escribir mal el nombre de una variable en el texto del programa una vez para obtener un resultado impredecible. Le recomendamos que siempre especifique la opción explícita y declare las variables.</i></p><p>El nombre de la variable debe cumplir los siguientes requisitos:</p> <ol><li>Comience con un símbolo del alfabeto latino;</li><li>Consistir únicamente en caracteres del alfabeto latino o caracteres del alfabeto latino y números;</li><li>No exceda los 255 caracteres de longitud;</li><li>Ser único dentro de su alcance.</li> </ol><h3><span>Alcance y vida útil</span></h3> <p>El alcance de una variable está determinado por el lugar donde fue declarada. Si está dentro del cuerpo de un procedimiento, dicha variable se denomina local y está disponible sólo dentro de este procedimiento. Si una variable se declara en el texto de un script, será visible para todos los procedimientos o funciones definidas en este script. Las variables locales pueden tener el mismo nombre si se declaran en procedimientos diferentes.</p><p><i>En el árbol del Explorador de la ventana del Editor de objetos de script hay una sección especial, Constantes y variables, para declarar variables globales visibles para todas las funciones de script del proyecto.</i></p><p>El intérprete asigna memoria para las variables locales en el momento en que se declaran y las libera al salir del procedimiento. Las variables globales existen desde el momento en que se declaran hasta que el script termina de ejecutarse. En relación con Gedymin, esto significa que existen variables globales durante toda la ejecución del programa.</p> <h3><span>Asignar un valor a una variable</span></h3> <p>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:</p><p>A = 200 B = "Nombre"</p><h3><span>Variables escalares y matrices</span></h3> <p>Una variable que contiene un solo valor se llama escalar. A veces, es necesario almacenar varios valores en una variable. En este caso, debes declarar una matriz. La sintaxis de la declaración es idéntica a la declaración de una variable escalar, con la excepción de que después del nombre entre paréntesis especificamos el tamaño de la matriz. La siguiente declaración creará una matriz de 12 elementos:</p><p>Meses oscuros(11)</p><p>En VBScript, el límite izquierdo del índice de una 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 la matriz, especifique su índice entre paréntesis:</p><p>Meses(0) = "Enero" Meses(1) = "Febrero" Meses(2) = "Marzo" ... Meses(10) = "Noviembre" Meses(11) = "Diciembre"</p><p>De manera similar, al acceder al valor de un elemento, utilizamos su índice:</p><p>NombreMes = Meses(5)</p><p>La matriz no tiene por qué 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:</p><p>Días de mes oscuros (11, 1)</p><p>Al acceder a elementos de una matriz multidimensional, se deben especificar todos los índices:</p><p>DíasMes(0, 0) = "Enero" DíasMes(0, 1) = 31 DíasMes(1, 0) = "Febrero" DíasMes(1, 1) = 28 ...</p><p>Arriba declaramos matrices cuyo tamaño no cambia durante la operación del programa. Si no sabes de antemano cuántos elementos necesitarás, puedes declarar una matriz dinámica:</p><p>Antes de usarlo, debe configurar el tamaño de la matriz dinámica usando el operador ReDim:</p><p>Redim A(25)</p><p>Durante la ejecución, puede llamar al operador ReDim varias veces y cambiar el tamaño de la matriz cada vez. La opción Conservar conserva los valores de los elementos de la matriz al cambiar el tamaño. Por ejemplo, el siguiente código aumentará la matriz declarada anteriormente en cinco elementos, dejando los existentes intactos:</p><p>Reserva ReDim A(30)</p><p>Recuerda que al reducir el tamaño del array, los valores de los elementos eliminados se perderán irremediablemente. Usando el operador Borrar, puede borrar los elementos de una matriz fija o liberar la memoria ocupada por una matriz dinámica.</p><p>Atenuar A Redim A(25) ... Borrar A</p><h3>Constantes</h3> <p>Es una buena regla general declarar constantes para valores que se utilizan repetidamente en el texto del programa. Un nombre constante asignado correctamente 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. Se crea una constante usando el operador Const:</p><p>Const CountryName = "Bielorrusia" Const CountryCode = 375</p><p>Se pueden declarar varias constantes dentro de una declaración, separadas por comas. Al igual que una variable, una constante tiene su propio alcance dependiendo de dónde (en un procedimiento o fuera de él) 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.</p><p><i>En el árbol del Explorador de la ventana del Editor de objetos de script hay una sección especial, Constantes y variables, para declarar constantes globales visibles para todas las funciones de script del proyecto.</i></p><p>Los valores de las constantes de cadena están entre comillas dobles.</p><p>Los valores del tipo Fecha deben estar rodeados por símbolos de almohadilla (#) y utilizar el formato americano: mes/día/año. Por ejemplo:</p><p>Const Día de la Independencia Pública = #25/03/1918#</p><p>Para evitar confusión entre constantes y variables, se recomienda utilizar un prefijo único para todas las constantes, como "con", o escribir el nombre de la constante en mayúsculas.</p><p>Para facilitar el trabajo del programador, VBScript contiene un conjunto <a href="https://neonkaraoke.ru/es/gs/wiki/index.php/VBScript._%D0%9F%D1%80%D0%B5%D0%B4%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D1%8B" title="VBScript. Constantes predefinidas">constantes predefinidas</a>.</p> <h3>Operadores</h3> <p>Los operadores de VBScript se dividen en cinco categorías: aritmética, comparación, fusión, lógica y asignación.</p> <h4><span>Operadores aritméticos</span></h4> <table class="wikitable" border="1"><tr><th>Operador</th> <th>Ejemplo de uso</th> <th>Descripción</th> </tr><tr><td> ^ </td> <td>numero^exponente</td> <td>Eleva el número al exponente. El número sólo puede ser menor que cero si es una potencia entera. Si uno de los operandos es nulo, toda la expresión es nula. Si se realizan varias exponenciaciones seguidas, el resultado se calcula de izquierda a derecha.</td> </tr><tr><td> * </td> <td>número1 * número2</td> <td>Producto de dos números. Si el operando tiene el valor 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.</td> </tr><tr><td> / </td> <td>número1 / número2</td> <td>División real de dos números. Las reglas para los operandos son similares a las del operador de multiplicación.</td> </tr><tr><td> \ </td> <td>número1\número2</td> <td>División entera. Antes de la evaluación, ambos operandos se convierten en Byte, Integer o Long. De lo contrario, se aplican las mismas reglas que para el operador de división.</td> </tr><tr><td>Modificación</td> <td>número1 Mod número2</td> <td>Resto de la división de números enteros. Conversión de operandos a un número entero, así como reglas para manejar vacíos y nulos, como la división de enteros.</td> </tr><tr><td> + </td> <td>expresión1 + expresión2</td> <td>Si ambos operandos son números, el resultado es su suma aritmética. Si ambos operandos son cadenas, se trata de una fusió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 sumará 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 tiene el valor entero 0. Si solo un operador está vacío, el valor del segundo operando se devuelve como resultado.</td> </tr><tr><td> - </td> <td>número1 – número2 o - número</td> <td>En el primer caso, devuelve la diferencia de dos números. En el segundo, invierte el signo del número. Reglas para operandos con valores Nulos y Vacío, como para el operador de multiplicación.</td> </tr></table><h4><span>Operadores de comparación</span></h4> <p>Formato para usar operadores de comparación:</p><p>Resultado = expresión1 operador de comparación expresión2</p><p>donde se utilizan los siguientes operadores de comparación:< (меньше), <= (меньше или равно), >(mayor que), >= (mayor o igual que), = (igual a),<>(no iguales).</p><p>Dependiendo de los tipos y valores de los operandos, la comparación se realiza de la siguiente manera:</p> <table class="wikitable" border="1"><tr><th>Si</th> <th>Eso</th> </tr><tr><td>Ambos operandos son números.</td> <td>Se hace una comparación entre dos números.</td> </tr><tr><td>Ambos operandos son cadenas.</td> <td>Se realiza una comparación de dos cadenas.</td> </tr><tr><td>Uno de los operandos es un número y el segundo es una cadena.</td> <td>El operando de cadena se convierte en un número y se realiza una comparación entre los dos números.</td> </tr><tr><td>Uno de los operandos está vacío y el segundo es un número.</td> <td>Se supone que el operando con el valor Vacío es 0.</td> </tr><tr><td>Uno de los operandos está vacío y el segundo es una cadena.</td> <td>El operando con el valor Vacío se considera la cadena vacía "". Se hace una comparación entre dos cadenas.</td> </tr><tr><td>Ambos operandos están vacíos.</td> <td>Los operandos se consideran iguales.</td> </tr><tr><td>Al menos uno de los operandos es nulo.</td> <td>El resultado es nulo.</td> </tr></table><p>El operador Is especial se utiliza para comparar dos variables de objeto y devuelve Verdadero si ambas variables hacen referencia a la misma instancia de objeto.</p> <h4><span>Operadores de concatenación</span></h4> <p>Resultado = expresión1 y expresión2</p><p>Si el operando no es una cadena, se convierte al tipo de cadena. Si ambos operandos son nulos, entonces el resultado también toma el valor Nulo; sin embargo, a diferencia de los otros operadores, si solo un operando es nulo, entonces se toma igual a la cadena vacía. Un operando establecido en Vacío también se trata como una cadena vacía "".</p> <h4><span>Operadores lógicos</span></h4> <p>VBScript nos proporciona los siguientes operadores lógicos:</p> <ol><li>Excepción lógica (Xor);</li><li>Equivalente lógico (Eqv);</li><li>Implicación lógica (Imp).</li> </ol><p>Los operandos de los operadores lógicos pueden ser expresiones booleanas o valores numéricos. En el primer caso, el resultado será una constante booleana, en el segundo, un número. Dependiendo del operador, proporcionar uno o dos valores nulos como entrada puede generar un resultado nulo. El operador Not es unario y devuelve la negación lógica de una expresión. El operador Not realiza una inversión bit a bit en un operando numérico. Los operadores lógicos restantes son binarios. La siguiente tabla muestra los resultados de ejecutar cada uno de los operadores dependiendo del valor de los operandos Exp1 y Exp2:</p> <table class="wikitable" border="1"><tr><th>Exp1</th> <th>Exp2</th> <th>Y</th> <th>O</th> <th>xor</th> <th>Eqv</th> <th>Diablillo</th> </tr><tr><td>Verdadero</td> <td>Verdadero</td> <td>Verdadero</td> <td>Verdadero</td> <td>FALSO</td> <td>Verdadero</td> <td>Verdadero</td> </tr><tr><td>Verdadero</td> <td>FALSO</td> <td>FALSO</td> <td>Verdadero</td> <td>Verdadero</td> <td>FALSO</td> <td>FALSO</td> </tr><tr><td>FALSO</td> <td>Verdadero</td> <td>FALSO</td> <td>Verdadero</td> <td>Verdadero</td> <td>FALSO</td> <td>Verdadero</td> </tr><tr><td>FALSO</td> <td>FALSO</td> <td>FALSO</td> <td>FALSO</td> <td>FALSO</td> <td>Verdadero</td> <td>Verdadero</td> </tr><tr><td>Verdadero</td> <td>Nulo</td> <td>Nulo</td> <td>Verdadero</td> <td>Nulo</td> <td>Nulo</td> <td>Nulo</td> </tr><tr><td>FALSO</td> <td>Nulo</td> <td>FALSO</td> <td>Nulo</td> <td>Nulo</td> <td>Nulo</td> <td>Verdadero</td> </tr><tr><td>Nulo</td> <td>Verdadero</td> <td>Nulo</td> <td>Verdadero</td> <td>Nulo</td> <td>Nulo</td> <td>Verdadero</td> </tr><tr><td>Nulo</td> <td>FALSO</td> <td>FALSO</td> <td>Nulo</td> <td>Nulo</td> <td>Nulo</td> <td>Nulo</td> </tr><tr><td>Nulo</td> <td>Nulo</td> <td>Nulo</td> <td>Nulo</td> <td>Nulo</td> <td>Nulo</td> <td>Nulo</td> </tr></table><p>En la vida, los operadores And y Or se utilizan con mayor frecuencia, y mucho menos Xor. En la práctica no hemos encontrado el uso de los operadores Eqv e Imp. Si le resulta difícil entender la tabla anterior, resumamos la acción de estos operadores:</p> <ul><li>Y se evalúa como Verdadero solo si ambos operandos son Verdaderos. En cualquier otro caso, es Falso o Nulo.</li><li>O se evalúa como Verdadero si al menos uno de los operandos es Verdadero.</li><li>Xor se evalúa como Verdadero si los operandos son diferentes y Falso si son iguales.</li> </ul><p>Cuando se ejecuta bit a bit en operandos numéricos, el resultado de un operador lógico está determinado por la siguiente tabla:</p> <table class="wikitable" border="1"><tr><th>Exp1</th> <th>Exp2</th> <th>Y</th> <th>O</th> <th>xor</th> <th>Eqv</th> <th>Diablillo</th> </tr><tr><td> 0 </td> <td> 0 </td> <td> 0 </td> <td> 0 </td> <td> 0 </td> <td> 1 </td> <td> 1 </td> </tr><tr><td> 0 </td> <td> 1 </td> <td> 0 </td> <td> 1 </td> <td> 1 </td> <td> 0 </td> <td> 1 </td> </tr><tr><td> 1 </td> <td> 0 </td> <td> 0 </td> <td> 1 </td> <td> 1 </td> <td> 0 </td> <td> 0 </td> </tr><tr><td> 1 </td> <td> 1 </td> <td> 1 </td> <td> 1 </td> <td> 0 </td> <td> 1 </td> <td> 1 </td> </tr></table><h4><span>Operador de asignación</span></h4> <p>El operador de asignación (=) se describe en detalle en la sección Variables.</p> <h4><span>El orden de aplicación de los operadores.</span></h4> <p>Si una expresión contiene varios operadores, se aplican según el orden establecido, lo que se denomina precedencia de operadores. Puede cambiar el orden predeterminado usando paréntesis. La expresión dentro del paréntesis siempre se evalúa primero.</p><p>En una expresión que contiene operadores de diferentes categorías, primero se realizan operaciones aritméticas, luego se realizan operadores de comparación y, por último, se realizan operadores lógicos. Todos los operadores de comparación tienen la misma prioridad y se evalúan de izquierda a derecha. Los operadores aritméticos y lógicos se evalúan en el siguiente orden:</p> <ol><li>Exponenciación (^);</li><li>Cambiar el signo de un número, menos unario (-);</li><li>Multiplicación (*) y división (/);</li><li>División entera (\);</li><li>Resto de división entera (Mod);</li><li>Suma (+) y resta (-);</li><li>Concatenación de cadenas (&).</li> </ol><p>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. Se aplica una regla similar en el caso de la presencia simultánea de operadores de suma y resta.</p><p>El operador de concatenación de cadenas (&) no es aritmético y tiene prioridad entre los operadores aritméticos y de comparación.</p><p>El orden de prioridad de los operadores lógicos es el siguiente:</p> <ol><li>Negación lógica, inversión (No);</li><li>Multiplicación lógica, conjunción (Y);</li><li>Suma lógica, disyunción (O);</li><li>Excepción lógica (Xor);</li><li>Equivalente lógico (Eqv);</li><li>Implicación lógica (Imp).</li> </ol><h3><span>Expresiones condicionales</span></h3> <p>Las expresiones condicionales se utilizan para controlar el orden de ejecución de los comandos del programa y le permiten organizar transiciones (ramificaciones) y repetición de comandos. Normalmente, los operadores de comparación se utilizan junto con expresiones condicionales.</p> <h4><span>Si... Entonces... Si no expresión</span></h4> <p>La expresión de salto 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.</p><p>Para ejecutar un solo comando cuando se cumple una condición determinada, utilice la sintaxis de expresión de una línea:</p><p>Dim S If DatePart("w", Now) = vbMonday Then S = "Monday" Application.MessageBox S, "", vbOkOnly</p><p>Tenga en cuenta que la sección Else se omite en este caso. Para ejecutar un grupo de declaraciones, debe incluirlas entre las palabras clave Then y End If.</p><p>Dim S If DatePart("w", Now) = vbMonday Then S = "Hoy es lunes" Application.MessageBox S, "", vbOkOnly End If</p><p>Si, cuando se cumple una condición, es necesario ejecutar un código, y cuando no se cumple una condición, se requiere otro código, entonces se utiliza la sintaxis de expresión con una sección Else:</p><p>Dim S If DatePart("w", Now) = vbMonday Then S = "Hoy es lunes" Else S = "Hoy no es lunes" End If Application.MessageBox S, "", vbOkOnly</p><p>Si necesita elegir entre varias alternativas, la sintaxis con la construcción ElseIf es adecuada:</p><p>Dim S, D D = DatePart("w", Now) If D = vbMonday Then S = "Monday" ElseIf D = vbTuesday Then S = "Tuesday" ElseIf D = vbWednesday Then S = "Wednesday" ... Finalizar si la aplicación. Cuadro de mensaje S, "", vbOkOnly</p><p>Si las declaraciones se pueden anidar:</p><p>Dim S, D D = DatePart("w", Now) Si D = vbMonday Entonces S = "Lunes" De lo contrario Si D = vbTuesday Entonces S = "Martes" De lo contrario Si D = vbWednesday Entonces S = "Miércoles" De lo contrario... Fin Si finaliza si finaliza si</p><p>Aunque no hay límite para el número de cláusulas ElseIf en una expresión condicional, su uso extensivo puede generar código confuso e ilegible. En caso de seleccionar una alternativa entre muchas posibles dependiendo del valor de un selector, se recomienda utilizar la expresión Select Case.</p> <h4><span>Seleccione...Expresión de caso</span></h4> <p>Reescribamos el ejemplo de los días de la semana usando una expresión de selección:</p><p>Dim S Seleccione Case DatePart("w", Now) Case vbMonday S = "Monday" Case vbTuesday S = "Tuesday" Case vbWednesday S = "Wednesday" ... Case Else Err.Raise 32000, "", "Día desconocido de semana " Fin Seleccionar</p><p>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 utilizar siempre la sección Caso más para detectar valores de selector sin formato o no válidos.</p> <h3><span>Declaraciones de bucle</span></h3> <p>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 de 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, al moverse por los registros de un conjunto de datos o al ejecutar un bloque de código en varios objetos. Hay varios ciclos, que se describen en las siguientes secciones. Algunos de ellos se ejecutan mientras la condición es Verdadera, otros se ejecutan mientras la condición es Falsa. Y por último, están aquellos que se ejecutan un número determinado de veces.</p> <h4>Operador Do..Loop</h4> <p>Este operador está diseñado para ejecutar un grupo de comandos hasta que una condición determinada sea Verdadera o hasta que se convierta en Verdadera. La condición se puede verificar como al comienzo del ciclo:</p><p>Hacer [(Mientras | Hasta) condición] Bucle</p><p>y así al final:</p><p>Hacer bucle [(Mientras | Hasta) condición]</p><p>El comando Exit Do puede aparecer un número ilimitado de veces en el cuerpo de un bucle. Normalmente se utiliza junto con una declaración condicional If...Then y permite transferir el control a la declaración inmediatamente después del ciclo. Cuando se utiliza Exit Do dentro de un bucle anidado, el control pasará al bucle exterior.</p><p>El siguiente código te permite reemplazar los dados:</p><p>Dim Resp, Num Do Num = Int(6 * Rnd + 1) Resp = Application.MessageBox(Num & "¿Otro número?", "",_ vbYesNo o vbQuestion) Bucle hasta Resp = vbNo</p><h4>Mientras..Wend</h4> <p>Es una versión truncada del operador Do..Loop y le permite ejecutar un grupo de comandos siempre que la condición sea Verdadera. Sintaxis del operador:</p><p>Mientras condición Wend</p><p>Tenga en cuenta que Exit Do no tiene ningún efecto dentro de este bucle. Los bucles While...Wend se pueden anidar.</p> <h4>Para...Siguiente</h4> <p>Este bucle repite un conjunto determinado de comandos un número específico de veces. La sintaxis del operador es:</p><p>Para contador = inicio Para finalizar Siguiente</p><p>Antes de que comience el ciclo, a la variable del contador se le asigna el valor de inicio. A continuación, se comprueba la condición del contador.<= end, при step >= 0, o contador >= final, con un paso negativo. Después de ejecutar un bloque de comandos, la variable contador aumenta en el valor de paso y todo se repite desde el principio.</p><p>No está prohibido cambiar el contador en el cuerpo de un bucle, pero se desaconseja encarecidamente, ya que dificulta la comprensión de la lógica del programa y su depuración.</p><p>Salir para puede aparecer en el cuerpo de un bucle cualquier número de veces. Los bucles se pueden anidar. Por ejemplo, este bucle inicializa una matriz tridimensional:</p><p>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</p><h4>Para cada uno...Siguiente</h4> <p>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:</p><p>Para cada elemento del grupo Siguiente</p><p>El bucle se ejecuta si hay al menos un elemento en la matriz o colección. Salir para puede aparecer en el cuerpo del bucle un número arbitrario de veces.</p><p>Ilustremos el uso de For Each... A continuación, con el siguiente código, que muestra una lista de archivos del directorio raíz de la unidad c:\</p><p>Dim fso, f, f1, fc, s Establecer fso = CreateObject("Scripting.FileSystemObject") Establecer f = fso.GetFolder("c:\") Establecer fc = f.Files para cada f1 en fc s = s & f1 .name y vbNewLine Siguiente aplicación.MessageBox s, "Archivos en c:\", vbOkOnly</p><h3>Trámites</h3> <p>Para ahorrar memoria y estructurar el programa, se puede formatear como procedimiento un fragmento de código que se llama repetidamente en diferentes lugares. Hay dos tipos de procedimientos en VBScript: subrutinas (Sub) y funciones (Function). 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 valores. Una función, una secuencia de declaraciones entre una función y una función final, devuelve un resultado y, por lo tanto, puede usarse en una expresión. Cada procedimiento debe tener un nombre que sea único dentro del módulo. Los nombres de los procedimientos declarados en un módulo global deben ser únicos dentro de todo el proyecto.</p><p>La definición de subrutina y función tiene la siguiente sintaxis:</p><p>| Privado] Subnombre [(arglist)] Fin Sub | Privado] Nombre de la función [(arglist)] Función final</p><p>Los procedimientos públicos son globales y están disponibles en todos los guiones del programa. Los trámites privados sólo están disponibles en el script donde fueron declarados. Salvo que se especifique lo contrario, el procedimiento declarado es público. La palabra clave Default sólo se puede utilizar en el cuerpo de una clase y sirve para especificar el método predeterminado de esta clase.</p><p>La lista de parámetros tiene la siguiente sintaxis:</p><p>Nombre de usuario [, ...]</p><p>Los parámetros se pueden pasar por valor (ByVal) o por referencia (ByRef). De forma predeterminada, todos los parámetros se pasan por valor. Las constantes, los resultados de la evaluación de expresiones, sólo se pueden pasar por valor. Cambiar el parámetro pasado por referencia cambiará el valor de la variable externa. Expliquemos el paso de parámetros dentro de un procedimiento usando el siguiente ejemplo:</p><p>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 de realizar el procedimiento DoCalculation " V1 = 20" V2 = 2 sub finales</p><p>Las variables declaradas dentro del cuerpo de un procedimiento son locales y se destruyen al finalizar su ejecución. Los valores de las variables locales no se guardan.</p><p>La lista de parámetros se especifica entre paréntesis cuando se llama a una función o cuando se llama a una subrutina mediante la instrucción Call. Entonces, podríamos escribir la llamada al procedimiento DoCalculation en el ejemplo anterior de la siguiente manera:</p><p>Llamar a DoCalculation(V1, V2, 10)</p><h3>Ejecutar expresión</h3> <h3>Clases de VBScript</h3> <p>VBScript le permite crear nuevas clases, que en adelante llamaremos clases VB. En general, no son clases completas en el sentido de la programación orientada a objetos, ya que no admiten herencia y, en consecuencia, polimorfismo. Entonces, de los tres pilares en los 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.</p><p>Una clase se define utilizando la siguiente construcción:</p><p>Declaraciones de nombre de clase Fin de clase</p><p>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 llamadas 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 procedimientos y funciones, en una clase VB el código miembro se escribe directamente en el texto de la clase.</p><p>Los miembros de una clase pueden ser declarados Privados o Públicos. Los primeros son visibles sólo dentro del código de una clase determinada, mientras que los segundos están disponibles tanto para el código interno como externo. Si una variable o función (procedimiento) no contiene una definición explícita de Público o Privado, entonces se considera pública. Los procedimientos o funciones declarados como Públicos dentro de un bloque de clase se convierten en métodos de esa clase.</p><p>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.</p> <h4><span>Definición de propiedades de clase</span></h4> <p>Ya dijimos anteriormente que los campos de una clase, declarados explícita o implícitamente como Públicos, pasan a ser 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).</p><p>La sintaxis para definir dichas funciones es la siguiente:</p><p>| Privado] Propiedad Obtener nombre [(arglist)] [nombre = expresión] [nombre = expresión] Fin de propiedad Propiedad Let nombre (valor) Fin de propiedad Propiedad Establecer nombre (referencia) Fin de propiedad</p><p>Al definir solo una función, leer o asignar, puede crear una propiedad que sea de solo lectura o de solo escritura, respectivamente. El procedimiento Property Let se utiliza para asignar tipos de datos simples y el procedimiento Property Set se utiliza para pasar una referencia a un objeto. Tenga en cuenta que las tres funciones pueden tomar una lista arbitraria de parámetros como entrada. De esta manera, puede organizar, por ejemplo, las propiedades de una matriz pasando el índice del elemento como argumento.</p> <h4><span>Crear y destruir una instancia de una clase VB</span></h4> <p>La creación de una instancia de una clase VB se realiza mediante el operador Nuevo.</p><p>Dim X Set X = Nuevo nombre de clase</p><p>La destrucción de una instancia creada previamente se produce automáticamente al completarse el bloque de código donde se declaró la variable correspondiente y siempre que no existan referencias externas a la misma. Si necesita destruir la instancia manualmente, debe asignar el valor Nothing a la variable.</p><p>‘declarando una variable y creando una instancia de la clase Dim X Set X = Nuevo nombre de clase...’ usando la instancia de clase... ‘destruyendo la instancia de clase Set X = Notning...</p><h4><span>Inicializar y finalizar eventos</span></h4> <p>El evento Inicializar ocurre cuando se crea una instancia de una clase y el evento Terminar ocurre cuando se destruye. El desarrollador puede definir sus propios controladores de datos de eventos. A continuación se muestra un ejemplo del uso de eventos de creación y eliminación de objetos:</p><p>Class TestClass " Definición del controlador de eventos Inicializar. Private Sub Class_Initialize MsgBox("TestClass comenzó") End Sub " Definición del controlador de eventos Terminar.</p> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy loading=lazy>");</script> </div> </div> </div> </div> <div id="sidebar" class="span4 sidebar_right"> <div class="inside"> <div class="sidebar_module sidebar_module_"> <h3 class="sidebar_module_heading"><span>Private Sub Class_Terminate MsgBox("TestClass terminado") End Sub End Class " Creando una instancia de la clase TestClass. " Se mostrará el mensaje "TestClass iniciado" Set X = New TestClass " Destruyendo la instancia. " El mensaje "TestClass terminado" Se mostrará el conjunto X = Nada</span></h3> <div class="sidebar_module_content"> <ul class="nav menu"> <li class="item"><a href="https://neonkaraoke.ru/es/internet/rasshirenie-sit-chem-otkryt-fail-sit-viktorina-kakoe/">El último</a></li> <li class="item"><a href="https://neonkaraoke.ru/es/rates/programma-dlya-skachivaniya-video-downloader-zagruzchik-video-pro-kachai-i-smotri/">extensión para sentarse. ¿Cómo abrir un archivo .SIT? Prueba: ¿Qué extensión de archivo es para un archivo de audio?</a></li> <li class="item"><a href="https://neonkaraoke.ru/es/mts-bank/skanirovanie-dokumentov-v-jpg-programmy-dlya-skanirovaniya-dokumentov/">Video Downloader Pro - Descarga y mira vídeos gratis en iPad</a></li> <li class="item"><a href="https://neonkaraoke.ru/es/internet/3-h-tranzistornyi-blok-pitaniya-televizorov-blok-pitaniya-lcd/">Programas para escanear documentos.</a></li> <li class="item"><a href="https://neonkaraoke.ru/es/news/glushenie-gsm-signala-shema-kak-sdelat-glushilku-sotovoi-svyazi-iz/">Fuente de alimentación del televisor LCD</a></li> <li class="item"><a href="https://neonkaraoke.ru/es/news/obnovit-hromium-do-poslednei-versii-skachat-hromium-plyusy-brauzera/">Cómo hacer un bloqueador de celular</a></li> <li class="item"><a href="https://neonkaraoke.ru/es/rates/pdf-creator-programma-dlya-sozdaniya-pdf-failov-na-russkom-yazyke-pdf24/">Actualiza Chromium a la última versión</a></li> <li class="item"><a href="https://neonkaraoke.ru/es/mts-bank/kto-lyubit-maksa-i-papu-kto-takoi-mister-maks-mesyachnyi-dohod-kanala/">PDF24 Creator: PDF Constructor gratuito y fácil de usar Cree PDF desde una ventana del programa que admita la impresión</a></li> <li class="item"><a href="https://neonkaraoke.ru/es/services/vybiraem-adapter-wi-fi-antenna-dlya-usileniya-wi-fi-signala-na-osnove/">Quien ama a Max y a papá. ¿Quién es el señor Max? Ingresos mensuales del canal Mister Max</a></li> <li class="item"><a href="https://neonkaraoke.ru/es/services/kak-udalit-istoriyu-prosmotrov-v-mozile-kak-udalit-istoriyu-v-firefox-variant/">Antena para fortalecer la señal WI-FI basada en un adaptador chino Velocidad de conexión inalámbrica</a></li> </ul> </div> </div> <div class="sidebar_module sidebar_module_"> <h3 class="sidebar_module_heading"><span>Cómo borrar el historial en Firefox</span></h3> <div class="sidebar_module_content"> <ul class="nav menu"> <li class="item"><a href="https://neonkaraoke.ru/es/mts-bank/chto-takoe-skaip-chto-takoe-skype-kogda-byl-sozdan-skaip/">Necesitas saber esto</a></li> <li class="item"><a href="https://neonkaraoke.ru/es/services/kakoi-format-audioknig-dlya-aifona-kak-luchshe-vsego-slushat-audioknigi-na-iphone-i/">¿Qué es Skype? ¿Cuándo se creó Skype?</a></li> <li class="item"><a href="https://neonkaraoke.ru/es/internet/min-sis-treb-gta-5-kompyuter-dlya-gta-v-sistemnye-trebovaniya-patch-dlya-slabyh/">La mejor manera de escuchar audiolibros en iPhone y iPad</a></li> <li class="item"><a href="https://neonkaraoke.ru/es/mts-bank/kollektivnyi-priem-efirnogo-televideniya-sputnikovoe-televidenie-dlya-domov/">Computadora para GTA V: requisitos del sistema</a></li> <li class="item"><a href="https://neonkaraoke.ru/es/news/sozdanie-prostogo-otcheta-na-skd-sozdanie-prostogo-otcheta-na-skd-kak-sozdat/">Televisión por satélite para hogares y hoteles, TV colectiva</a></li> <li class="item"><a href="https://neonkaraoke.ru/es/mts-bank/kak-popolnit-mts-cherez-vebmani-opisanie-v-detalyah-popolnenie-wmr-koshelka/">Creando un informe simple en SKD Cómo crear un nuevo informe en 1s 8</a></li> <li class="item"><a href="https://neonkaraoke.ru/es/internet/brauzery-brauzery-dlya-windows-brauzer-bez-skachivaniya/">Recargar una billetera WMR desde una cuenta de teléfono móvil Cómo recargar una billetera webmoney usando MTS</a></li> <li class="item"><a href="https://neonkaraoke.ru/es/internet/sensory-sony-imx-tablica-vedushchii-inzhener-po-kamere-sony-xperia-o/">Ingeniero líder de cámaras de Sony Xperia sobre el desarrollo de la fotografía móvil, las tecnologías de Sony y el futuro.</a></li> <li class="item"><a href="https://neonkaraoke.ru/es/news/propali-podpischiki-v-instagram-chto-delat-chto-takoe-otpiski/">¿Qué son los dejar de seguir en Instagram?</a></li> <li class="item"><a href="https://neonkaraoke.ru/es/news/menyaem-parol-sa-v-sql-izmenyaem-parol-sa-v-ms-sql-s-pomoshchyu-programmy-asunsoft/">Cambiar la contraseña sa en MS SQL usando Asunsoft SQL Password Geeker</a></li> </ul> </div> </div> <div class="sidebar_module sidebar_module_"> </div> </div> </div> </div> </div> </section> <footer id="footer" class="container"> <div id="copyright"> <div> <p class="copytext">2024 neonkaraoke.ru - Internet. Noticias. Tarifas. Servicios. MTS</p> <ul class="nav menu"> <li class="item-113"><a href="https://neonkaraoke.ru/es/sitemap.xml">Mapa del sitio</a></li> </ul> </div> </div> </footer> <div id="gotop" class=""> <a href="#" class="scrollup">TPL_TPL_FIELD_SCROLL</a> </div> </body> </html>