Menú
Está libre
registro
hogar  /  Navegantes/ Conceptos básicos de VBScript. VBScript

Conceptos básicos de VBScript. VBScript

Continuación

Script de Visual Basic

¿Por qué necesita scripts de VBS?

El script VBS es una solución poderosa para automatizar las acciones del usuario en los sistemas Windows. Este tipo de secuencias de comandos se usa comúnmente para:

  • creando escenarios complejos;
  • usar objetos de otras aplicaciones y bibliotecas;
  • ocultar ventanas durante la ejecución del script;
  • cifrado de la lógica del script.

Básicamente, los scripts de VBS se utilizan para procesar datos, administrar el sistema, trabajar con cuentas de usuarios y computadoras, interactuar con aplicaciones de oficina, trabajar con bases de datos y otras tareas complejas.

Disposiciones Básicas

Dependiendo del lenguaje de la secuencia de comandos, el contenido y el cifrado, existen los siguientes tipos de secuencias de comandos:

  • vbs: secuencia de comandos de Visual Basic
  • vbe: secuencia de comandos de Visual Basic cifrada
  • js - Java Script
  • jse - Script Java cifrado
  • wsh - configuración de la secuencia de comandos
  • wsf: secuencia de comandos integrada en XML

En este artículo, miraré scripts como vbs.

Los scripts generalmente se editan en el Bloc de notas de Windows, pero recomiendo usar Notepad2, que resalta las palabras clave de Visual Basic y ayuda a formatear el cuerpo del script. Por lo tanto, un script vbs es un archivo de texto sin formato llamado * .VBS, que puede editarse fácilmente en el bloc de notas y ejecutarse haciendo doble clic o llamando por su nombre en la consola.

Como se describió anteriormente, los scripts no se compilan, sino que se interpretan. Es decir, para procesar un script, el sistema debe tener un intérprete del lenguaje VBS, e incluso hay dos intérpretes de este tipo en Windows: WScript con ventana y CScript de consola; ambos intérpretes son Windows Script Host (WSH).

De forma predeterminada, todos los scripts se ejecutan a través de WScript, es decir, no se requieren configuraciones, pero para ejecutar el script en la ventana de la consola, debe ejecutarlo a través de CScript o establecer CScript como el intérprete predeterminado. Para hacer esto, haga lo siguiente en la línea de comando:

CScript // H: CScript

Después de eso, todos los scripts se ejecutarán en modo consola. El regreso al modo de ventana se realiza con el siguiente comando:

CScript // H: WScript

Las siguientes reglas funcionan en Visual Basic:

  • la longitud de la línea no está limitada;
  • el caso no se considera;
  • no se cuenta el número de espacios entre parámetros;
  • la línea de comando puede romperse y el símbolo "_" debe insertarse en el lugar de la ruptura;
  • la longitud máxima de un nombre de variable es de 255 caracteres;
  • los comentarios se indican con un símbolo "" ".

"=== Encabezado de información del script ===" Nombre del script: "nombre del script;" Fecha: "fecha de modificación;" Autor: "autor;" Descripción: "descripción;" === Bloque de inicialización === Directiva "Opción explícita" , que prohíbe la creación automática de "variables; Oscuro "declaración de variable; Dim () "declaración de matrices; Establecer "conexión de objeto;" === 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 cuando se utilizan por primera vez en el cuerpo de un script, a menos que la directiva Option Explicit lo prohíba. Si declara la directiva Option Explicit al principio del script, entonces todas las variables deben definirse de antemano utilizando las siguientes construcciones:

Oscuro "variable disponible para todas las subrutinas; Public "variable disponible para todas las subrutinas; Privado "una variable accesible solo para el programa actual y sus subrutinas;

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

Const = "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 en ella. Los siguientes tipos de datos existen en Visual Basic:

  • vacío: variable no inicializada;
  • nulo - variable vacía;
  • booleano - tipo booleano, valores posibles: Falso, Verdadero o 0, 1;
  • byte - entero sin signo de 8 bits, valores posibles: 0 .. 255;
  • entero - entero de 32 bits, valores posibles: -32768 .. 32767;
  • long - entero de 64 bits, valores posibles: -2147483648 .. 2147483647;
  • moneda - tipo de moneda, valores posibles: -922337203685477.5808 a 922337203685477.5807;
  • número de coma flotante simple, valores posibles: -3.402823e38 .. -1.401298e-45 para números negativos y 1.401298e-45 .. 3.402823e38 para números positivos;
  • doble - número de coma flotante, valores posibles: 1.79769313486232e308 .. -4.94065645841247e-324 para números negativos y 4.94065645841247e-324 .. 1.79769313486232e308 para números positivos;
  • fecha - fecha, valores posibles: 01.01.1900 y 31.01.9999;
  • cadena - variable de cadena, capacidad hasta 2 mil millones de caracteres;
  • objeto: un puntero a un objeto;
  • error - código de error.

Los datos se pueden verificar para verificar el cumplimiento de los tipos, así como también traducirlos de un tipo a otro, si los valores lo permiten. Para operaciones sobre tipos de datos, se utilizan los siguientes comandos:

VarType ( ) "devuelve el número de tipo de la variable; TypeName ( ) "devuelve el nombre de tipo de una variable; IsArray ( ) "comprobando que la variable es una matriz; IsDate ( ) "comprobando que la variable sea una fecha; IsEmpty ( ) "comprobando que la variable no está inicializada; IsNull ( ) "comprobando que la variable está vacía; IsNumeric ( ) "comprobando que la variable es un número; IsObject ( ) "comprobando que la variable es un objeto; CCur ( ) "conversión a tipo de moneda; CBool ​​( ) "conversión de variable a tipo booleano; CByte ( ) "conversión de variable a tipo byte; CDate ( ) "convertir una variable al tipo de fecha; CDbl ( ) "conversión de variable a tipo doble; CInt ( ) "conversión de variable a tipo entero; CLng ( ) "conversión de variable a tipo largo; CSng ( ) "convertir una variable a tipo single; CStr ( ) "convertir una variable al 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 sea fácil determinar el tipo de datos en el texto del script. Para hacer esto, se recomienda poner símbolos condicionales delante del nombre de la variable que determinan el tipo de variable:

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

Las matrices de variables se pueden utilizar en los scripts de VBS para almacenar listas, tablas e incluso construcciones más complejas. Las matrices unidimensionales (listas) pueden ser dinámicas, es decir, le permiten cambiar su dimensión en el transcurso del script. Todas las matrices se declaran con el comando Dim:

Oscuro

Un ejemplo de uso de matrices

Dim aMyArray1 (10,10) "crea una matriz estática con dimensiones 11x11; Dim aMyArray2 ()" crea una matriz dinámica; aMyArray1 (0,0) = "Hola" "llenando la matriz; aMyArray1 (0,1) =" Gente "" llenando la matriz; aMyArray1 (1,0) = "World" "llenando la matriz.

Antes de usar una matriz dinámica, debe especificar la dimensión actual con el comando ReDim, después de lo cual la matriz se puede reformar en cualquier lugar del script, mientras se borra toda la matriz o se conservan los valores de celda antiguos con el comando Preservar:

ReDim aMyArray2 (0) "formando una matriz a partir de un elemento; aMyArray2 (0) =" Hola "" llenando la matriz; ReDim aMyArray2 (1) "eliminando la matriz anterior y formando una nueva a partir de" otros elementos; aMyArray2 (0) = "Hola" "llenando la matriz; aMyArray2 (1) =" Mundo "" llenando la matriz; ReDim Preserve aMyArray2 (2) "formando un arreglo de tres elementos, dejando" los valores antiguos de los elementos en las celdas donde estaban; aMyArray2 (1) = "!" "llenando la matriz; Erase aMyArray2" eliminando la matriz.

Para averiguar la dimensión de una matriz, generalmente usan la función UBound, que se discutirá a continuación junto con otras funciones para trabajar con datos.

Ramificación condicional

Ni un solo escenario completo está completo sin ramificación, la ramificación le ayuda a elegir el camino correcto cuando se cumple o no alguna condición. En otras palabras, las bifurcaciones implementan la lógica de la secuencia de comandos. Se implementan varios mecanismos de ramificación en los scripts de VBS. Considérelos en orden.

Construya para una acción condicional:

Si Luego

Construya para varias acciones condicionales:

Si Luego Terminara si

Construcción de horquilla:

Si Luego Demás Terminara si

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

Si Luego De lo contrario Luego Demás Terminara si

En todas las construcciones anteriores, se aplica la siguiente regla: "Si la condición , luego genere una lista de acciones , que se ubican bajo el bloque de condiciones actual. Si no se cumple la condición actual, vaya a la lista de acciones bajo el mando de Else ".

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

Seleccione el caso Caso Caso Caso más Finalizar Seleccionar

En esta construcción, la regla funciona: "Si el valor de la variable igual al valor , luego haz una lista de acciones por debajo de este valor, de lo contrario, vaya a comprobar el siguiente valor ."

Ciclos

Para organizar acciones repetitivas o iterar sobre los elementos de una matriz, generalmente se utilizan bucles. En los scripts de VBS se organizan varios tipos de bucles: un bucle regular, un bucle con un número desconocido de iteraciones y un bucle condicional.

El ciclo habitual está organizado por la estructura For - Next, en cuyos argumentos parámetros como el nombre del contador ( ), el valor inicial del contador ( ), el valor final del contador ( ) y, si es necesario, el paso del contador (paso ).

Para = Para próximo

Si durante la operación del bucle es necesario detener la iteración sobre los valores, entonces esto se puede hacer usando el comando Salir para

Para = Para Si Entonces salga por próximo

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

Para cada En próximo

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

Los bucles con condiciones se utilizan para procesar datos cuando se cumple una determinada condición. Dichos bucles son de dos tipos: con un control al comienzo del ciclo y con un control al final.

Haga un bucle mientras se cumple la condición, con una marca al principio

Hacer mientras Círculo

Haga un bucle hasta que se cumpla la condición, con una marca al principio

Hacer hasta Círculo

Como se mencionó anteriormente, las condiciones se pueden colocar al final del ciclo. En este caso, el cuerpo del bucle se ejecutará al menos una vez. Como en los bucles normales, un bucle condicional se puede interrumpir con el comando Exit Do:

Hacer Si Entonces Salir Hacer Bucle hasta

Funciones integradas

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

Funciones de manejo de fechas:

Fecha "devuelve la fecha actual; Hora" devuelve la hora actual; Ahora "devuelve la fecha y hora actuales; DateDiff ( , , ) "devuelve la diferencia entre fechas; MonthName ( ) "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 ( ) "devuelve el minuto a partir de la fecha especificada; Segundo ( ) "devuelve el segundo de la fecha especificada.

Funciones de procesamiento de cadenas:

Asc ( ) "devuelve el código de carácter ANSI; Chr ( ) "carácter de retorno por código ANSI; InStr ( , ) "devuelve la posición de la subcadena en la cadena" especificada; InStrRev ( , ) "devuelve la posición de la subcadena en la cadena especificada", comenzando desde el final de la cadena; Entrar ( , ) "convierte matriz en cadena; Len ( ) "devuelve la longitud de la cadena; LCase ( ) "convertir una cadena en una cadena de caracteres pequeños"; UCase ( ) "convertir una cadena en una cadena de caracteres grandes"; Izquierda ( , ) "devuelve el número especificado de caracteres desde" el principio de la línea; Derecha ( , ) "devuelve el número especificado de caracteres desde" el final de la línea; Medio ( , , ) "devuelve el número especificado de caracteres de" el número de carácter de cadena especificado; Reemplazar ( , , [, Params]) "reemplazo de subcadena en la cadena especificada; Espacio ( ) "líneas del número especificado de espacios; Dividir ( , [, Params]) "convertir cadena en matriz; Cadena ( , ) "cadena del número especificado" de ciertos caracteres; SrtReverse ( ) "duplicación de líneas; Recortar ( ) "recortando espacios a la izquierda y derecha de la cadena; LTrim ( ) "recortando espacios a la izquierda de la línea; RTrim ( ) "recortando espacios a la derecha de la línea.

Funciones matemáticas:

Randomize "inicializa el mecanismo de números aleatorios (no devuelve nada); Rnd" devuelve un valor aleatorio no entero entre 0 y 1; Atn ( ) "calculando el arcangente de un número; Cos ( ) "calcular el coseno de un número; Sin ( ) "calculando el seno de un número; Exp ( ) "cálculo del logaritmo natural de un número; Log ( ) "calculando el logaritmo decimal de un número; Sqr ( ) "calcular la raíz cuadrada de un número; Abs ( ) "calculando el valor absoluto de un número; Hex ( ) "calcula el valor hexadecimal de un número; Int ( ) "redondeando el número; Fix ( ) "calculando 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 es el resto de dividir dos números;
  • ^ - exponenciación;
  • & - concatenación de dos cadenas;
  • Es - comparación de dos objetos;
  • Eqv - comparación de dos expresiones;
  • Operación de negación no lógica;
  • Y - operación de conjunción lógica;
  • O - operación de disyunción lógica;
  • Xor - operación de exclusión lógica;
  • Imp es una operación de implicación lógica.

El orden de ejecución de las operaciones se determina como en todos los lenguajes de programación: primero, se realizan las operaciones entre paréntesis, luego se calculan las funciones, luego las operaciones de multiplicación y división, seguidas de sumas y restas, y las operaciones lógicas completan el cálculo.

Funciones personalizadas

Los scripts escritos en Visual Basic le permiten definir funciones y procedimientos personalizados y llamarlos desde el programa principal. Prácticamente no hay diferencia entre un procedimiento y una función, la diferencia radica en el sentido lógico de estas subrutinas: las funciones se suelen utilizar para calcular algún valor y los procedimientos se utilizan para realizar acciones. Sin embargo, tanto los procedimientos como las funciones pueden realizar operaciones y pasar valores al programa principal. A pesar de esto, no debe olvidarse del propósito de estas subrutinas: funciones - para cálculos, procedimientos - para acciones.

La función es declarada por el operador Función, seguido del nombre de la función definida por el usuario, que no debe coincidir con ninguna palabra reservada del lenguaje Visual Basic, luego se indican las variables que se pasarán a la subrutina como parámetros - especificando variables en esta construcción significa asignar celdas de memoria para las variables de la subrutina (variables de declaración para la función). En el cuerpo de la subrutina, la estructura del script no es diferente a la de un programa regular (aquí puede declarar variables adicionales, realizar operaciones, usar otras funciones y procedimientos), al final del cuerpo debe haber un operador para asignar una función a algún valor: este valor se devolverá al programa principal. Puedes interrumpir la ejecución de una función con la instrucción Exit Function, pero en este caso debes recordar asignar un valor a la función, de lo contrario el script generará un error. La función termina con la instrucción End Function.

Definición de función

Función () Si Luego = Salir Función Finalizar Si = Función final

Llamada de función

= ()

Un procedimiento se define de manera similar a una función, pero con un operador -Sub diferente. Dado que el procedimiento no devuelve ningún valor al programa principal, no hay una instrucción de asignación antes de salir del procedimiento. La ejecución del procedimiento se puede interrumpir utilizando el comando Exit Sub, y toda la estructura se completa con la instrucción End Sub. Para llamar a un procedimiento en el programa principal, debe usar la palabra clave Call y el nombre de la función con los argumentos requeridos. (La palabra clave Call es opcional, pero recomiendo usarla para evitar llamadas a procedimientos incorrectos).

Definición de un procedimiento

Sub () Si Luego Salir del sub final si End Sub

Llamada a procedimiento

()

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

Durante el funcionamiento de la subrutina, los valores de las variables en la parte principal del script no cambian, incluso si la subrutina contiene variables con el mismo nombre. Para que la subrutina pueda cambiar los valores de las variables del script principal, es necesario establecer la propiedad de la variable como ByRef en los argumentos de la subrutina. De forma predeterminada, todas las variables se definen con la propiedad ByVal.

Sub (ByRef [, argumentos]) = End Sub

En este caso, el argumento se pasa por referencia a una celda de memoria; el valor de la variable cambia en el script principal. En otras palabras, el parámetro ByRef convierte el procedimiento 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, la secuencia de comandos gestiona todos los errores en modo automático y, si se produce un error, la secuencia de comandos se detiene. Para deshabilitar el manejo automático de errores, debe usar una directiva especial On Error Resume Next, que deshabilita el manejo automático de errores y continúa el script incluso si está presente. Para el manejo manual de errores, debe consultar el objeto Err incorporado, que almacena el estado del error. El objeto Err tiene las siguientes propiedades y métodos:

Número "devuelve el número del último error; Descripción" devuelve la descripción del último error; Borrar "borrar objeto Err; Raise" llamar a un error de prueba.

Un ejemplo de manejo manual de errores:

En caso de error Reanudar Siguiente iTotalPoints = InputBox ("Ingrese el número total de puntos") iNumberOfTests = InputBox ("Ingrese el número de pruebas") iAvarage = iTotalPoints / iNumberOfTests Seleccione Caso Err.Number Caso 0 "sin errores; WScript.Echo" Promedio = "& CStr (iAvarage) Case 11" división por cero; WScript. WScript.Echo "Error desconocido WScript.Quit" End Select

Objetos, sus métodos y propiedades.

Los scripts VBS, como su padre, el lenguaje Visual Basic, es un lenguaje de programación orientado a objetos, es decir, el concepto principal es el concepto de objetos y clases.

Una clase es un tipo que describe cómo se estructuran los objetos. Un objeto significa algo que tiene un cierto comportamiento y una forma de presentación, un objeto es una instancia de una clase. Una clase se puede comparar con un dibujo según el cual se crean los objetos. Las clases suelen estar diseñadas para que sus objetos se correspondan con los objetos del dominio.

Entonces, para trabajar con un objeto, primero debe crearlo usando clases de la biblioteca requerida:

Colocar = CrearObjeto ( .)

Puede eliminar un objeto configurándolo en Nothing:

Colocar = Nada

Todos los objetos con los que trabaja Windows Script Host tienen métodos y propiedades. Para hacer referencia a un método, debe especificar un objeto y, a través de un punto, un método con los parámetros requeridos.

. [, Param2, ..., ParamN] Llamar .([, Param2, ..., ParamN])

La situación es similar con las propiedades, pero las propiedades se pueden asignar y leer en variables y otras propiedades, sin embargo, debe tener en cuenta el tipo de datos de las variables y propiedades, de lo contrario el script generará un error de incompatibilidad de tipos de datos.

. = . = . = .

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

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

Tenga en cuenta que "objeto" se refiere a la lógica de la secuencia de comandos, no a la lógica del sistema de archivos. Es decir, cuando decimos "eliminar un objeto", nos referimos a un objeto de secuencia de comandos lógico que no afecta de ninguna manera la eliminación de algunas partes del sistema de archivos.

Para averiguar qué bibliotecas existen en su sistema operativo, las clases incluidas en las bibliotecas, sus métodos y propiedades, puede utilizar el explorador de objetos, por ejemplo de Microsoft Word:

  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 alguna biblioteca no se refleja en la lista, entonces se puede conectar a través del menú Herramientas -> Referencias.

Hay métodos en los scripts que no están incluidos en ninguna clase, están disponibles directamente en el cuerpo del script:

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

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

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

Propiedades y métodos 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 objetos; están disponibles automáticamente para su uso directamente en el cuerpo del script.

Crear objeto ( .) "crea un objeto; GetObject ( ) "conectando un objeto desde un archivo; ConnectObject ( , ) "conectarse a eventos de un objeto existente; DisconnectObject ( ) "desconectarse de eventos de objeto; Echo ()" mostrando un mensaje en la pantalla; Los argumentos "devuelven una matriz de argumentos de la línea de comandos del script; Nombre" devuelven el nombre del intérprete del script; Ruta "devuelve la ruta al intérprete de secuencias de comandos; FullName" devuelve el nombre completo del intérprete de secuencias de comandos; Versión "devuelve la versión del intérprete de secuencias de comandos; BuildVersion" devuelve la versión del ensamblaje del intérprete de secuencias de comandos; ScriptName "devuelve el nombre del archivo de script; ScriptFullName" devuelve el nombre completo del archivo de script; Interactivo "establece o devuelve el modo de interactividad del script; Dormir ( ) "pausa durante el número especificado de milisegundos; Salir" finaliza el script.

Analizaremos la aplicación de estos métodos y propiedades con más detalle en los ejemplos de otras clases.

Métodos y propiedades de la clase Shell

Para trabajar con el sistema operativo, se utiliza un Shell de clase especial, que le permite realizar operaciones tales como iniciar programas, modificar el registro, crear accesos directos, acceder a carpetas y variables del sistema y acceder al registro del sistema. Entonces, los métodos y propiedades de la clase Shell:

ExpandirEnvironmentStrings ( ) "devuelve el valor de la variable de sistema solicitada; EnviEnvironment ( ) "devuelve una matriz de variables del sistema; CreateShortcut ( ) "crear acceso directo; Ventana emergente ( [, Params]) "muestra un mensaje de ventana en la pantalla; RegRead ( ) "leyendo un valor del registro; RegWrite ( ,[, Tipo]) "escribe el valor en el registro; RegDelete ( ) "eliminar un valor del registro; LogEvent ( ,) "escribiendo un evento en el registro del sistema; Ejecutar ( [, Params]) "inicia el programa en un nuevo proceso; Exec ( ) "ejecuta el programa en la consola secundaria; AppActivate ( ) "activación de ventana; SendKeys ( <Keys>) "enviar caracteres a la ventana activa; CurrentDirectory" configuración o devolver el directorio actual; SpecialFolders () "devuelve una matriz de carpetas de servicio o ruta" de la carpeta de servicio solicitada.</p><p>Ejemplo. Usando métodos y propiedades de la clase Shell.</p><p>"Crear un objeto de la clase Shell Set oShell = Wscript.CreateObject (" WScript.Shell ")" Ejecutar calculadora oShell.Run ("Calc.exe") "Retrasar WScript.Sleep (100)" Ejecutar el bloc de notas oShell.Run ("Bloc de notas .exe ")" Delay WScript.Sleep (100) "Cambia a la ventana de la calculadora oShell.AppActivate" Calculator "" Delay WScript.Sleep (100) "Simula pulsaciones de teclas oShell.SendKeys (" 1 (+) 2 (=) ") "Obtener rutas de escritorio sDesktopPath = oShell.SpecialFolders (" Desktop ")" Crear objeto de acceso directo Establecer oLink = oShell.CreateShortcut (sDesktopPath & "\ Test.lnk") "Personalizar acceso directo oLink.TargetPath = WScript.ScriptFullName oLink.WindowLinkty .Hotkey = "CTRL + MAYÚS + T" oLink.IconLocation = "notepad.exe, 0" oLink.Description = "Enlace de prueba" oLink.WorkingDirectory = sDesktopPath oLink.Save "Crear objeto de entorno y obtener propiedades del sistema en él Establecer oSysEnv = oShell.Environment ("SISTEMA") "Muestra un mensaje sobre el número de procesadores en la pantalla MyResult = oShell.Popup (" Número de procesadores: "& oSysEnv (" NUMBER_OF_PROCESSORS "), _ 3," Message ", 0)" Obtener la ruta a la carpeta de Windows y mostrar el mensaje en la pantalla MyResult = oShell.Popup ("directorio de Windows:" & _ oShell.ExpandEnvironmentStrings ("% WINDIR%" ), 3, "Mensaje", 0) "Leer una clave de registro y mostrar su valor en la pantalla WScript.Echo oShell.RegRead (" HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ ProductID ")" Escribir un valor de cadena en el registro MyResult = oShell.RegWrite ("HKCU \ ScriptEngine \ Value", "My Value") "Escribiendo un valor numérico en el registro MyResult = oShell.RegWrite (" HKCU \ ScriptEngine \ Key ", 1," REG_DWORD ")" Eliminando la clave de registro MyResult = oShell.RegDelete ("HKCU \ ScriptEngine \") "Escribiendo un evento en el registro del sistema MyResult = oShell.LogEvent (0," Script de prueba completado ")</p><h3>Métodos y propiedades de la clase de red</h3> <p>Como ya hemos visto, los scripts de VBS pueden funcionar con el shell de Windows, pero esta no es su única posibilidad. Con la clase Red, puede acceder y administrar objetos de red. Echemos un vistazo más de cerca a la clase Red:</p><p>ComputerName "devuelve el nombre del equipo; UserDomain" devuelve el nombre de dominio; UserName "return username; EnumNetworkDrives" lista de retorno de unidades de red asignadas; Unidad de red ( <LocalName>, <RemoteName>,) "conectar un recurso de red; RemoveNetworkDrive ( <Name>,,) "desconectando un recurso de red; EnumPrinterConnections" devuelve una lista de impresoras de red; AddWindowsPrinterConnection ( <PrinterPath>) "conecta una impresora de red; AddPrinterConnection ( <LocalName>, <RemoteName>[, UpdateProfile, User, Password] "conecta una impresora de red al puerto especificado; RemovePrinterConnection ( <Name>[, Force, UpdateProfile]) "deshabilita la impresora de red; SetDefaultPrinter ( <PrinterName>) "seleccione la impresora predeterminada;</p><p>Ejemplo. Usando los métodos y propiedades de la clase Network.</p><p>"Crear un objeto de clase Network Set oNetwork = WScript.CreateObject (" WScript.Network ")" Mostrar un mensaje sobre el nombre del equipo WScript.Echo "Computer Name =" & oNetwork.ComputerName "" Mostrar un mensaje sobre el nombre del usuario actual WScript.Echo "User Name =" & oNetwork.UserDomain & "\" & oNetwork.UserName "Asignar unidad de red oNetwork.MapNetworkDrive" Z: "" \\ Server \ Share "" Obtener colección de unidades de red asignadas Establecer oDrives = oNetwork.EnumNetworkDrives "Mostrar mensajes sobre unidades de red asignadas para i = 0 a oDrives.Count -1 paso 2 WScript.Echo" Drive "& oDrives.Item (i) &" = "& oDrives.Item (i + 1) Siguiente" Extracción de la unidad de red oNetwork.RemoveNetworkDrive "Z:" "Conexión de una impresora de red oNetwork.AddPrinterConnection" LPT1 "," \\ Server \ Printer "" Configuración de una impresora predeterminada oNetwork.SetDefaultPrinter "\\ Server \ Printer" "Obtención de una colección de conjunto de impresoras oPrinters = oNetwork.EnumPrinterConnections</p><h3>Propiedades y métodos 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. Esta tarea puede ser resuelta por la clase FileSystemObject, diseñada para trabajar con el sistema de archivos. Los siguientes son los objetos que esta clase puede crear:</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 los discos del sistema;</li> <li>Unidades: un objeto que almacena una lista de discos 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>Construir camino ( <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; GetDrive ( <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 el archivo ( <FileSpec>) "crea un objeto Archivo; GetFileName ( <PathSpec>) "devuelve el nombre del archivo (sin extensión)" en la ruta especificada; GetFolder ( <FolderSpec>) "crea un objeto Carpeta; GetParentFolderName ( <Path>) "devuelve el nombre de la carpeta en la que" se encuentra el archivo o carpeta en la ruta especificada; GetSpecialFolder ( <FolderSpec>) "crea un objeto Carpeta en la carpeta de servicio especificada"; GetTempName "devuelve un nombre de archivo" generado aleatoriamente; DriveExists ( <DriveSpec>) "comprueba la existencia del disco; FolderExists ( <FileSpec>) "comprueba la existencia de la carpeta; CopyFolder ( <Source>, <Destination>[, Overwrite]) "copia la carpeta; MoveFolder ( <Source>, <Destination>) "mueve la carpeta; DeleteFolder ( <FolderSpec>[, Force]) "elimina la carpeta; CreateFolder ( <FolderName>) "crea una carpeta; FileExists ( <Filespec>) "comprueba la existencia de un archivo; CopyFile ( <Source>, <Destination>[, Overwrite]) "copia el archivo; MoveFile ( <Source>, <Destination>) "mueve el archivo; DeleteFile ( <FileSpec>[, Force]) "elimina el archivo; CreateTextFile ( <FileName>[, Overwrite, UnioCode]) "crea un archivo de texto; OpenTextFile ( <FileName>[, IOMode, Create, Format]) "abre un archivo de texto para leer o" escribir.</p><p>Los objetos Unidades, Carpetas y Archivos de la clase FileSystemObject almacenan información sobre discos, carpetas y archivos y se utilizan principalmente para recopilar información sobre el sistema de archivos. Solo tienen dos propiedades:</p><p>Count "devuelve el número de elementos de la colección; Item ( <ObjectName>) "devuelve el registro en el índice especificado de la colección (no se usa)", se usa un bucle For Each para iterar sobre los elementos de la colección.</p><p>Para que quede más claro qué es una colección de objetos, considere un ejemplo de cómo mostrar una lista de archivos en la raíz de la unidad C:</p><p>"Crear objeto de clase FileSystemObject Set oFSO = CreateObject (" Scripting.FileSystemObject ")" Crear objeto Folder Set oFolder = oFSO.GetFolder ("C: \") "Obtener colección de archivos Set oFilesCollection = oFolder.Files" Obtener número de elementos en la colección sResult = sResult & oFilesCollection.Count & "archivos en C: \" & vbCrLf "Leyendo los atributos de cada archivo de la colección Para cada oFile en oFilesCollection sResult = sResult & oFile.Name & vbTab sResult = sResult & oFile.Size & vbCrLf Junto a la pantalla MsgBox (sResult)</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 el espacio disponible en disco; Ruta "devuelve la ruta a la unidad; RootFolder" crea un objeto Carpeta que apunta a la raíz de la unidad; SerialNumber "devuelve el número de serie de la unidad; ShareName" devuelve el nombre de red de la unidad; TotalSize "Devuelve la capacidad del disco en bytes; VolumeName" Devuelve o establece la etiqueta del disco.</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; DateCreated" devuelve la fecha en que se creó la carpeta; DateLastAccessed "devuelve la fecha en que se accedió por última vez a la carpeta; DateLastModified" devuelve la fecha en que se modificó la carpeta; Drive "devuelve la letra de la unidad donde se encuentra la carpeta; Archivos" devuelve la colección de archivos en la carpeta; IsRootFolder "devuelve True si la carpeta es la raíz de la unidad; Name" devuelve el nombre de la carpeta; ParentFolder "crea un objeto Folder que apunta a la" carpeta principal; Ruta "devuelve la ruta a la carpeta; ShortName" devuelve el nombre de la carpeta en formato 8.3; ShortPath "devuelve la ruta a la carpeta en formato 8.3; Tamaño" devuelve el tamaño de la carpeta; Subcarpetas "devuelve una colección de subcarpetas; Tipo" devuelve el tipo de carpeta; Dupdo ( <Destination>[, Sobrescribir]) "copia la carpeta; Mover ( <Destination>) "mueve la carpeta; Eliminar ( <Force>) "elimina la carpeta; CreateTextFile ( <FileName>[, Overwrite, 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 atributos de archivo; DateCreated" devuelve la fecha de creación del archivo; DateLastAccessed "devuelve la fecha en que se accedió por última vez al archivo; DateLastModified" devuelve la fecha en que se modificó el archivo; Unidad "devuelve la letra de la unidad donde se encuentra el archivo; Nombre" devuelve el nombre del archivo; ParentFolder "crea un objeto Folder que apunta a la" carpeta principal; Ruta "devuelve la ruta al archivo; ShortName" devuelve el nombre del archivo en formato 8.3; ShortPath "devuelve la ruta al archivo en formato 8.3; Tamaño" devuelve el tamaño del archivo; Tipo "devuelve el tipo de archivo; Copiar ( <Destination>[, Sobrescribir]) "copia el archivo; Mover ( <Destination>) "mueve el archivo; Eliminar ( <Force>) "elimina el archivo; OpenAsTextStream ()" abre un archivo de texto para leer o escribir.</p><p>El objeto TextStream es una herramienta para acceder al contenido de un archivo. Con él, puede leer y modificar el archivo:</p><p>AtEndOfLine "indica si se ha alcanzado el final de la línea; AtEndOfStream" indica si se ha alcanzado el final de la línea; Columna "devuelve el número de la columna en la que se encuentra el cursor de lectura; Línea" devuelve el número de la línea en la que se encuentra el cursor de lectura; Cerrar "cierra el archivo, lo libera para otros procesos; Leer ( <CharactersNumber>) "lee el número especificado de caracteres, comenzando desde la posición" del cursor de lectura; ReadAll "lee todo el archivo; ReadLine" lee la línea donde se encuentra el cursor de lectura; Saltar ( <CharactersNumber>) "omite el número especificado de caracteres, comenzando desde la posición" del cursor de lectura; SkipLine "omite 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 en blanco.</p><p>Nos familiarizamos con todos los métodos y propiedades de la clase FileSystemObject, considere un ejemplo del uso de esta clase:</p><p> "Estableciendo las constantes para los códigos de carpeta del sistema Const WindowsFolder = 0 Const SystemFolder = 1 Const TemporaryFolder = 2" Estableciendo las constantes para los códigos de tipo de acceso a un archivo de texto Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 "Creando un objeto del FileSystemObject Set oFSO = CreateObject ("Scripting.FileSystemObject") "Obtener la colección de unidades Set DrivesCollection = oFSO.Drives" Procesar cada unidad para obtener su etiqueta o nombre de red para cada oDrive en DrivesCollection sResult = sResult & oDrive.Drive. & ":" Si oDrive.DriveType = Remoto Entonces sResult = sResult & oDrive.ShareName & vbCrLf ElseIf oDrive.IsReady Entonces sResult = sResult & oDrive.VolumeName & vbCrLf Else sResult = sResult y vbCrLos resultados de la pantalla de salida de WsResult = sResult y vbCr .Echo "= oFSO.GetDrive (" C ") sResult = oDrive.DriveLetter &": - "" Obtener el tipo de unidad C: Seleccionar caso oDrive.DriveType Caso 0: sResult = sResult & "Desconocido -" Caso 1: sResult = sResult & "Removable -" Caso 2: sResult = sResult & "Fixed -" Caso 3: sResult = sResult & "Network -" Caso 4: sResult = sResult & "CD-ROM -" Caso 5: sResult = sResult & "RAM Disk -" End Select "Determinando la disponibilidad del disco y obteniendo sus propiedades Si oDrive.IsReady Entonces sResult = sResult &" Ready "& vbCrLf sResult = sResult &" FileSystem is "& oDrive.FileSystem & vbCrLf sResult & sResult = sResult "Espacio disponible:" & _ FormatNumber (oDrive. object (carpeta de archivos temporales de Windows) Establecer oTempFolder = oFSO.GetSpecialFolder (TemporaryFolder) "Crear un objeto de archivo de texto (y crearlo en la raíz de la unidad C :) Establecer oFile = oFSO.CreateTextFile (" C: \ TestFile.txt " , True) "Escribir en archivo de texto oFile.WriteLine (" Esto es una prueba. ") OFile.WriteLine (sResult)" Cerrar el archivo de texto y liberarlo para otros procesa oFile.Close "Verificando la presencia de un archivo en la carpeta de archivos temporales de Windows, borrando este archivo Si oFSO.FileExists (oFSo.BuildPath (oTempFolder.Path," TestFile.txt ")) Entonces _ oFSO.DeleteFile (oFSo. BuildPath (oTempFolder. Path, "TestFile.txt")) "Crear objeto de archivo Set oFile = oFSO.GetFile (" C: \ TestFile.txt ")" Mover archivo a la carpeta de archivos temporales de Windows oFile.Move (oFSo.BuildPath (oTempFolder .Path, "TestFile.txt")) "Cambiar el atributo del archivo If oFile.Attributes y 32 Then oFile. Attributes = oFile.attributes - 32 Wscript.Echo ("El bit de archivo se borra") Else oFile.Attributes = oFile.attributes + 32 Wscript.Echo ("El bit de archivo está establecido") End If sResult = oFile.Path & vbCrLf & oFile .DateLastModified & ":" & vbCrLf "Cree un objeto de flujo abriendo un archivo para su lectura. Establecer oTestFile = oFSO.OpenTextFile (oFile.Path, ForReading, False)" Leer el flujo hasta que se encuentre el final del flujo Hacer mientras oTestFile.AtEndOfStream<>True sResult = sResult & oTestFile.ReadLine Loop "Cerrar el archivo de texto y liberarlo para otros procesos oTestFile.Close" Mostrar un mensaje en la pantalla Wscript.Echo (sResult)</p><h3>Eliminar secuencia de comandos de 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: la estructura del script, los nombres de las variables, el trabajo con matrices y colecciones, el manejo manual de errores, la lectura de variables del sistema, la creación de un archivo de texto del registro de operaciones del script , trabajando con el sistema de archivos, usando procedimientos.</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 los archivos temporales obsoletos de la computadora "==== Script Main Logic ==== "Habilitar el manejo manual de errores en caso de error Continuar siguiente" Constante para el intervalo de tiempo cuando los archivos se consideran obsoletos Const PurgeTime = 14 "días" Excepciones: perfiles de usuario que no deben manejarse Dim aExceptions (3) aExceptions ( 0) = "Usuario predeterminado" aExceptions (1) = "LocalService" aExceptions (2) = "NetworkService" aExceptions (3) = "Todos los usuarios" "Crear conjunto de objetos de Shell y del sistema de archivos oShell = CreateObject (" wscript.shell ") Set oFSO = CreateObject ("Scripting.Filesystemobject") "Definición de rutas de carpeta de servicio sProgramFiles = oShell.ExpandEnvironmentStrings ("% ProgramFiles% ") sWinDir = oShell.ExpandEnvironmentStrings ("% WinDir% ") sWinTempFolder = sWinTempFolder = sWinTempFolder = sWinTempFolder y configuración "" Creación del registro de trabajo de la escena sLogFileName = sWinTempFolder & "\ PurgeTemp_" & Date sLogFileName = Reemplazar (sLogFileName, ".", "_") sLogFileName = Reemplazar (sLogFileName, "/", "_") Establecer oLogFile = oTFSO.Cile log ", verdadero) oLogFile .WriteLine "========== Iniciar purga ==========" "Limpiar la carpeta temporal de Windows oLogFile.WriteLine vbCrLf &" ======= === Windows Temporary carpeta ========== "PurgeFolder (sWinTempFolder)" Elimina la carpeta temporal para el perfil de usuario y los archivos de Internet oLogFile.WriteLine vbCrLf & _ "========== Usuarios Carpeta temporal y Usuarios Internet temporal Archivos ========== "Establecer oDocuments = oFSO.GetFolder (sDocuments) Establecer colProfiles = oDocuments.SubFolders para cada oProfile en colProfiles bFlag = false Para cada sException en aExceptions if InStr (oProfile.Path, sException)> 0 luego bFlag = true salir para end if Next If bFlag = False Then PurgeFolder (oProfile.Path & "\ Local Settings \ Temp") PurgeFolder (oProfile.Path & "\ Local Settings \ Temporary Internet Files") End If Next "Borrando NOD32 Quarantine oLogFile.WriteLine vbCrLf &" ========== NOD32 Quarantine ========== "sQuarantine = sProgramFiles &" \ Eset \ Infected "PurgeFolder (sQuarantine)" Cerrando el registro de archivos oLogFile.WriteLine vbCrLf & "========== Detener purga ==========" oLogFile.Close "Procedimiento PurgeFolder - eliminar archivos antiguos Sub PurgeFolder (sFolderPath)" Creación de una carpeta Establecer objeto oFolder = oFSO.GetFolder (sFolderPath) "Obtener la colección de archivos Establecer colFiles = oFolder. Archivos "Procesar cada archivo de la colección Para cada oFile en colFiles" Verifique si el archivo está desactualizado If (Date-oFile.DateLastModified)> PurgeTime y (Date-oFile.DateCreated)> _ PurgeTime Then "Escriba el mensaje en el script log oLogFile.Writeline oFile.Path & vbTab & oFile.DateCreated "Eliminar archivo obsoleto oFSO.DeleteFile oFile.Path, True" Compruebe si hay errores si err.Number<>0 luego "Escriba un mensaje de error en el registro de script oLogFile.Writeline" -----> Error # "& CStr (Err.Number) _ &" "& Err.Description" Borrar error Err.Clear end if "Pause at 20 milisegundos WScript.Sleep 20 End if Next "Recuperando una colección de subcarpetas Set colSubFolders = oFolder.SubFolders" Procesando cada subcarpeta para cada oSubFolder en colSubFolders "Llamando recursivamente el procedimiento para borrar archivos antiguos - la subrutina se llama" PurgeFolder (oSubFolder.Path.Path ) "Si oSubFolder.Size = 0 Then" Escriba un mensaje en el registro de script oLogFile.Writeline oSubFolder.Path & vbTab & oSubFolder.DateCreated "Elimine la carpeta vacía oFSO.DeleteFolder oSubFolder.Path" Busque errores Si err.Number<>0 luego "Escriba un mensaje de error en el registro de script oLogFile.Writeline" -----> Error # "& CStr (Err.Number) _ &" "& Err.Description" Borrar error Err.Clear End if End if Next End Sub</p><p>Así que hemos visto los conceptos básicos de Visual Basic Script. Resumamos e identifiquemos los pros y los contras de estos escenarios:</p> <ul><li>Los scripts no requieren compilación y su código se puede editar en cualquier momento;</li> <li>Los scripts de VBS son prácticamente ilimitados en funcionalidad y pueden usar varias bibliotecas del sistema y objetos de otras aplicaciones;</li> <li>Los archivos VBS se pueden ejecutar tanto en la consola como en el modo de ventana, por lo que el usuario puede controlar la visibilidad del progreso de ejecución del script;</li> <li>Los scripts de VBS le permiten utilizar funciones y procedimientos personalizados;</li> <li>este lenguaje es ideal para trabajar con cadenas y variables numéricas, fechas, así como para procesar archivos de texto, administración de sistemas y dominios;</li> <li>Los scripts de VBS son difíciles de escribir y requieren habilidades de programación;</li> <li>dichos scripts solo funcionan en sistemas operativos Windows.</li> </ul><p>Vitaly Bochkarev</p> <h2>enlaces externos</h2> <p>Sección de enlaces externos, es decir, enlaces a otros sitios a los que este recurso no tiene nada que ver. Además, el propietario del sitio del sitio no asume ninguna responsabilidad por la disponibilidad de estos recursos y por su contenido.</p> <h3>Tipos de datos</h3> <p>VBScript utiliza un solo tipo de datos, Variant, que le permite almacenar un número, cadena, fecha, valor booleano, referencia de objeto y otra información en una variable. Puede determinar el tipo de contenido de una variable mediante un conjunto de funciones: <a href="https://mkr-novo2.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 VarType">VarType</a>, TypeName, IsArray, IsDate, IsEmpty, IsNull, IsNumeric, IsObject, que se analizarán a continuación. El tipo de información que contiene también se denomina subtipo variante. En la siguiente tabla se muestra una lista completa de subtipos:</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 usa una variable no inicializada en expresiones numéricas, se sustituirá 0 y en cadenas, una cadena vacía.</td> </tr><tr><td>Nulo</td> <td>La variable no contiene datos.</td> </tr><tr><td>Booleano</td> <td>Boolean puede ser Verdadero o Falso.</td> </tr><tr><td>Byte</td> <td>Un número entero en el rango de 0 a 255.</td> </tr><tr><td>Entero</td> <td>Un número entero en el rango de -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 -2147483 648 a 2147483 647.</td> </tr><tr><td>Soltero</td> <td>Número de coma flotante de precisión simple. Para valores negativos, el rango válido es <p>desde -3.402823E38 hasta -1.401298E-45. Para positivo: 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 <p>79769313486232E308 a -4,94065645841247E-324. Para positivo: de 4.94065645841247E-324 a 1.79769313486232E308.</p> </td> </tr><tr><td>Fecha y 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>Cuerda</td> <td>Una secuencia de caracteres. La longitud máxima está en la región de 2 mil millones de caracteres.</td> </tr><tr><td>Objeto</td> <td>Un objeto.</td> </tr><tr><td>Error</td> <td>Numero erroneo.</td> </tr></table><p>Dependiendo de la expresión en la que participe la variable, su contenido se convertirá automáticamente al tipo requerido. Considere este ejemplo:</p><p>Opción Subprueba explícita VBScript Dim A, B A = 5 B = "12" Application.MessageBox A + B, "", vbOkOnly End Sub</p><p>Dado que una variable numérica está involucrada en la expresión <b>A</b>, el intérprete convierte el valor de la variable <b>B</b> de cuerda <b>"12" </b> en el número y resumirlos:</p><p>Cambiemos la macro para que la variable <b>A</b> también contenía la línea:</p><p>Opción Sub Prueba explícita VBScript Dim A, B A = "5" B = "12" Application.MessageBox A + B, "", vbOkOnly End Sub</p><p>Ejecútelo para su ejecución. Ahora la pantalla mostrará el resultado de la fusión (concatenación) de dos cadenas, y no la suma de sus representaciones numéricas:</p><p><img src='https://i0.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 una expresión es exactamente la concatenación de cadenas y no la suma de sus representaciones numéricas, entonces se debe usar el operador & en lugar de +.</p> <h3>Variables</h3> <p>Una variable es una práctica representación simbólica de un área de la memoria donde una aplicación almacena algunos datos. Durante la ejecución de la aplicación, el valor de la variable puede cambiar. La variable debe declararse con la instrucción Dim antes de su uso.</p><p>Con 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 del tipo Variant.</p><p><i>Si Option Explicit no se especifica en la primera línea del texto del script, las variables se pueden usar sin declaración. Pero esta ruta puede conducir a errores difíciles de detectar. Basta con cometer un error una vez en la ortografía del nombre de la variable en el texto del programa para obtener un resultado impredecible. Recomendamos que siempre especifique Option Explicit y declare variables.</i></p><p>El nombre de la variable debe cumplir los siguientes requisitos:</p> <ol><li>Comience con un carácter del alfabeto latino;</li><li>Consiste únicamente de los caracteres del alfabeto latino o de los caracteres del alfabeto latino y números;</li><li>No exceda los 255 caracteres de longitud;</li><li>Sea ú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 se declaró. Si está dentro del cuerpo de un procedimiento, dicha variable se llama local y solo está disponible dentro de este procedimiento. Si se declara una variable en el texto del script, será visible para todos los procedimientos o funciones definidos en este script. Las variables locales pueden tener el mismo nombre si se declaran en diferentes procedimientos.</p><p><i>En el árbol del Explorador de la ventana del Editor de objetos de secuencia de comandos, hay una sección especial (Constantes y variables) para declarar las variables globales visibles para todas las funciones de secuencia de comandos del proyecto.</i></p><p>El intérprete asigna memoria para las variables locales en el momento en que se declaran y la libera al salir del procedimiento. Las variables globales existen desde el momento en que se declaran y hasta que el script finaliza su ejecución. En relación con Gedymin, esto significa que existen variables globales durante todo el tiempo de ejecución del programa.</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>Matrices y variables escalares</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, debe declarar una matriz. La sintaxis de declaración es idéntica a la declaración de variable escalar, excepto que después del nombre entre paréntesis, especificamos la dimensión de la matriz. La siguiente declaración creará una matriz de 12 elementos:</p><p>Dim Monthes (11)</p><p>En VBScript, el límite izquierdo del índice de la matriz es siempre 0. Por lo tanto, el tamaño de la matriz se calcula como el número entre paréntesis más uno. Al asignar un valor a un elemento de matriz, debe especificar su índice entre paréntesis:</p><p>Monthes (0) = "enero" Monthes (1) = "febrero" Monthes (2) = "marzo" ... Monthes (10) = "noviembre" Monthes (11) = "diciembre"</p><p>Del mismo modo, cuando nos referimos al valor de un elemento, usamos su índice:</p><p>MonthName = Monthes (5)</p><p>La matriz no tiene que ser unidimensional. VBScript nos permite especificar hasta 60 dimensiones al declarar una matriz. Por ejemplo, la siguiente declaración creará una matriz bidimensional de 12 filas y dos columnas:</p><p>Dim MonthDays (11, 1)</p><p>Al acceder a los elementos de una matriz multidimensional, se deben especificar todos los índices:</p><p>MonthDays (0, 0) = "enero" MonthDays (0, 1) = 31 MonthDays (1, 0) = "febrero" MonthDays (1, 1) = 28 ...</p><p>Arriba, declaramos matrices, cuyo tamaño no cambia mientras el programa se está ejecutando. Si no sabe de antemano cuántos elementos se necesitarán, puede declarar una matriz dinámica:</p><p>Antes de su uso, debe establecer el tamaño de la matriz dinámica utilizando el operador ReDim:</p><p>ReDim A (25)</p><p>Durante la ejecución, puede llamar a la instrucción ReDim varias veces, cada vez cambiando el tamaño de la matriz. La opción Conservar conserva los valores de los elementos de la matriz cuando se cambia de tamaño. Por ejemplo, el siguiente código incrementará la matriz anterior en cinco elementos, dejando intactos los existentes:</p><p>ReDim Preservar A (30)</p><p>Recuerde que cuando disminuye el tamaño de la matriz, los valores de los elementos eliminados se perderán irremediablemente. Con la instrucción Erase, puede borrar los elementos de una matriz fija o liberar la memoria ocupada por una matriz dinámica.</p><p>Dim A ReDim A (25) ... Borrar A</p><h3>Constantes</h3> <p>Es una buena práctica declarar constantes para valores reutilizados en el texto del programa. Un nombre constante bien asignado mejora la legibilidad y su uso simplifica el proceso de realizar cambios en el código. A diferencia de las variables, el valor de una constante no se puede cambiar durante la ejecución del programa. Las constantes se crean utilizando el operador Const:</p><p>Const CountryName = "Bielorrusia" Const CountryCode = 375</p><p>Se pueden declarar varias constantes dentro de un operador, separadas por comas. Como una variable, una constante tiene su propio alcance dependiendo de dónde (dentro o fuera del procedimiento) y cómo (Pública o Privada) fue declarada. Las constantes creadas por el operador Const sin especificar Public o Private son públicas de forma predeterminada.</p><p><i>En el árbol del Explorador de la ventana del Editor de objetos de secuencia de comandos, hay una sección especial (Constantes y variables) para declarar constantes globales visibles para todas las funciones de secuencia de comandos del proyecto.</i></p><p>Los valores de las constantes de cadena se incluyen entre comillas dobles.</p><p>Los valores de tipo Fecha deben estar rodeados por signos de almohadilla (#) y deben usar el formato de mes / día / año de EE. UU. Por ejemplo:</p><p>Día de la Independencia Pública Const = # 25/03/1918 #</p><p>Para evitar confusiones entre constantes y variables, se recomienda utilizar un único prefijo para todas las constantes, por ejemplo "con", o escribir el nombre de la constante en mayúsculas.</p><p>Para facilitar el trabajo del programador, VBScript contiene un conjunto <a href="https://mkr-novo2.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, combinación, booleano 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>número ^ exponente</td> <td>Aumenta el número a exponente. El número puede ser menor que cero solo en el caso de un grado entero. Si uno de los operandos es Nulo, toda la expresión se evalúa como Nulo. Si se realizan múltiples exponenciaciones seguidas, el resultado se calcula de izquierda a derecha.</td> </tr><tr><td> * </td> <td>número1 * número2</td> <td>Producto de dos números. Si el operando está vacío, se supone que es cero. Si al menos uno de los operandos es nulo, toda la expresión se evalúa como nula.</td> </tr><tr><td> / </td> <td>número1 / número2</td> <td>División real de dos números. Para los operandos, las reglas son las mismas que para el operador de multiplicación.</td> </tr><tr><td> \ </td> <td>número1 \ número2</td> <td>División entera. Ambos operandos se convierten al tipo Byte, Integer o Long antes de ser evaluados. De lo contrario, se aplican las mismas reglas que para el operador de división.</td> </tr><tr><td>Modificación</td> <td>número1 Mod número2</td> <td>Resto de una división entera. Conversión de operandos a un entero, así como las reglas para manejar Empty y Null, como en la división de enteros.</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, concatenación (concatenación) de dos cadenas. Si un operando es un número y el otro es una cadena, entonces el operando de cadena se convertirá en un número y se agregará al numérico. Si al menos uno de los operandos es nulo, toda la expresión se evalúa como nula. Si ambos operandos están vacíos, el resultado es un valor entero de 0. Si solo un operador es vacío, el valor del segundo operando se devuelve como resultado.</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. Las reglas para los operandos nulos y vacíos son las mismas que para el operador de multiplicación.</td> </tr></table><h4><span>Operadores de comparación</span></h4> <p>Formato de operador de comparación:</p><p>Resultado = expresión1 comparador no operador expresión2</p><p>donde se utilizan los siguientes operadores de comparación:< (меньше), <= (меньше или равно), >(mayor que),> = (mayor o igual), = (igual),<>(no es igual).</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>Ese</th> </tr><tr><td>Ambos operandos son números.</td> <td>Compara dos números.</td> </tr><tr><td>Ambos operandos son cadenas.</td> <td>Se realiza la 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 de los dos números.</td> </tr><tr><td>Uno de los operandos es vacío y el otro 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 es vacío y el segundo es una cadena.</td> <td>Se asume que el operando con el valor Vacío es la cadena vacía "". Se realiza la comparación de 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 especial Is se utiliza para comparar dos variables de objeto y devuelve True si ambas variables se refieren 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 en un tipo de cadena. Si ambos operandos son nulos, entonces el resultado también es nulo; sin embargo, a diferencia de otros operadores, si solo un operando es nulo, se asume que es una cadena vacía. Un operando con el valor vacío también se trata como una cadena vacía "".</p> <h4><span>Operadores logicos</span></h4> <p>VBScript nos proporciona los siguientes operadores lógicos:</p> <ol><li>Exclusión lógica (Xor);</li><li>Equivalente booleano (Eqv);</li><li>Implicación lógica (Imp).</li> </ol><p>Se pueden utilizar expresiones booleanas o valores numéricos como operandos para operadores lógicos. En el primer caso, el resultado será una constante booleana, en el segundo, un número. Dependiendo del operador, la introducción de uno o dos valores nulos en la entrada puede dar como resultado un resultado nulo. El operador Not es unario y devuelve la negación lógica de la expresión. El operador Not realiza una inversión bit a bit en un operando numérico. El resto de los operadores lógicos son binarios. La siguiente tabla muestra los resultados de ejecutar cada uno de los operadores dependiendo del valor de los operandos Exp1 y Exp2:</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>Cierto</td> <td>Cierto</td> <td>Cierto</td> <td>Cierto</td> <td>Falso</td> <td>Cierto</td> <td>Cierto</td> </tr><tr><td>Cierto</td> <td>Falso</td> <td>Falso</td> <td>Cierto</td> <td>Cierto</td> <td>Falso</td> <td>Falso</td> </tr><tr><td>Falso</td> <td>Cierto</td> <td>Falso</td> <td>Cierto</td> <td>Cierto</td> <td>Falso</td> <td>Cierto</td> </tr><tr><td>Falso</td> <td>Falso</td> <td>Falso</td> <td>Falso</td> <td>Falso</td> <td>Cierto</td> <td>Cierto</td> </tr><tr><td>Cierto</td> <td>Nulo</td> <td>Nulo</td> <td>Cierto</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>Cierto</td> </tr><tr><td>Nulo</td> <td>Cierto</td> <td>Nulo</td> <td>Cierto</td> <td>Nulo</td> <td>Nulo</td> <td>Cierto</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 Y y O se utilizan con mayor frecuencia, y con mucha menos frecuencia: Xor. No hemos tenido que lidiar con el uso práctico de los operadores Eqv e Imp. Si le resulta difícil lidiar con la tabla anterior, resumimos el efecto de estos operadores:</p> <ul><li>Y es Verdadero solo si ambos operandos son Verdaderos. En cualquier otro caso, es Falso o Nulo.</li><li>O es Verdadero si al menos uno de los operandos es Verdadero.</li><li>Xor es Verdadero si los valores de los operandos son diferentes y Falso si son iguales.</li> </ul><p>Cuando se ejecuta bit a bit sobre operandos numéricos, el resultado del operador lógico se determina a partir de 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>Orden del operador</span></h4> <p>Si una expresión contiene varios operadores, se aplican en un orden que se denomina precedencia de operadores. Puede cambiar el orden predeterminado utilizando paréntesis. Una expresión entre paréntesis siempre se evalúa primero.</p><p>En una expresión que contiene operadores de diferentes categorías, primero se realizan las operaciones aritméticas, luego los operadores de comparación y, por último, los operadores lógicos. Todos los operadores de comparación tienen la misma precedencia y se evalúan de izquierda a derecha. Los operadores aritméticos y lógicos se evalúan en el siguiente orden:</p> <ol><li>Exponenciación (^);</li><li>Cambio de signo numérico, unario menos (-);</li><li>Multiplicación y división (/);</li><li>División entera (\);</li><li>Resto de una división entera (Mod);</li><li>Suma (+) y resta (-);</li><li>Fusionar 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. Una regla similar se aplica en el caso de la presencia simultánea de los 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>La secuencia de los operadores lógicos es la siguiente:</p> <ol><li>Negación lógica, inversión (Not);</li><li>Multiplicación lógica, conjunción (Y);</li><li>Suma lógica, disyunción (O);</li><li>Exclusión lógica (Xor);</li><li>Equivalente booleano (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 (ramas) y repeticiones de comandos. Normalmente, los operadores de comparación se utilizan junto con expresiones condicionales.</p> <h4><span>Expresión Si .. Entonces .. Else</span></h4> <p>La expresión de rama condicional If le permite ejecutar un grupo particular de comandos dependiendo del resultado de una expresión lógica o del valor de una variable booleana.</p><p>Para ejecutar un solo comando cuando se cumple una condición determinada, se utiliza 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, escríbalas 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 la condición, es necesario ejecutar un código, y si no se cumple la condición, otro, entonces se usa la sintaxis de la expresión con la sección Else:</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, DD = DatePart ("w", Now) If D = vbMonday Then S = "Monday" ElseIf D = vbTuesday Then S = "Tuesday" ElseIf D = vbWed Wednesday Entonces S = "Wednesday" ... End If Application. MessageBox S, "", vbOkOnly</p><p>Si las declaraciones se pueden anidar:</p><p>Dim S, DD = DatePart ("w", Now) If D = vbMonday Then S = "Monday" Else If D = vbTuesday Then S = "Tuesday" De lo contrario Si D = vbWed Wednesday Entonces S = "Wednesday" Else ... End If End If End If</p><p>Aunque el número de secciones ElseIf en una expresión condicional es ilimitado, su uso intensivo puede generar un código confuso e ilegible. En el caso de elegir una alternativa entre una variedad de posibles, dependiendo del valor de algún selector, se recomienda utilizar la expresión Seleccionar caso.</p> <h4><span>Seleccione .. Expresión de caso</span></h4> <p>Reescribamos el ejemplo del día de la semana usando una expresión de selección:</p><p>Dim S Seleccione Case DatePart ("w", ahora) Case vbMonday S = "Monday" Case vbTuesday S = "Tuesday" Case vbWed Wednesday S = "Wednesday" ... Case Else Err.Raise 32000, "", "Día desconocido de la semana "Fin Seleccionar</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 usar siempre la sección Case Else para capturar valores de selector no procesados ​​o no válidos.</p> <h3><span>Operadores 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 en bucle que repita ciertos comandos una y otra vez. Las declaraciones de bucle se utilizan en muchas situaciones: al calcular un total sobre una lista de números, moverse a través de registros en un conjunto de datos o para ejecutar un bloque de código para varios objetos. Hay varios bucles, que se describen en las siguientes secciones. Algunos de ellos se cumplen mientras la condición es Verdadera, otros, mientras que la condición es Falsa. Y finalmente, están los que se ejecutan un número determinado de veces.</p> <h4>Operador Do..Loop</h4> <p>Este operador está destinado a ejecutar un grupo de comandos hasta que una condición determinada sea Verdadera o hasta que se convierta en Verdadero. La condición se puede verificar como al comienzo del ciclo:</p><p>Hacer [(Mientras | Hasta) condición] Bucle</p><p>Y al final:</p><p>Do Loop [(Mientras | Hasta) condición]</p><p>El comando Exit Do puede aparecer un número ilimitado de veces en el cuerpo del bucle. Por lo general, se usa junto con la expresión condicional If..Then y le permite transferir el control a la instrucción que sigue inmediatamente al ciclo. Al usar Exit Do dentro de un bucle anidado, el control fluirá hacia el bucle exterior.</p><p>El siguiente código reemplaza a los dados:</p><p>Dim Resp, Num Do Num = Int (6 * Rnd + 1) Resp = Application.MessageBox (Num & "Another number?", "", _ VbYesNo o vbQuestion) Bucle hasta Resp = vbNo</p><h4>Mientras ... vamos</h4> <p>Es una versión truncada del operador Do..Loop y le permite ejecutar un grupo de comandos mientras la condición es Verdadera. Sintaxis del operador:</p><p>Mientras que la condición Wend</p><p>Tenga en cuenta que Exit Do no tiene ningún efecto dentro de este bucle. Mientras ... Los bucles Wend se pueden anidar.</p> <h4>Para ... Siguiente</h4> <p>Este bucle repite un conjunto específico 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, la variable de contador está configurada para comenzar. A continuación, se comprueba el cumplimiento de la condición del contador.<= end, при step >= 0, o contador> = fin, si el paso es negativo. Después de la ejecución del bloque de comandos, la variable contador se incrementa en el valor de paso y todo se repite desde el principio.</p><p>No se prohíbe cambiar el contador en el cuerpo del bucle, pero se desaconseja enfáticamente, ya que complica la comprensión de la lógica del programa y su depuración.</p><p>Exit For puede aparecer tantas veces como desee en el cuerpo del bucle. Los bucles se pueden anidar. Por ejemplo, un bucle como este inicializa una matriz 3D:</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 ciclo se ejecuta si hay al menos un elemento en la matriz o colección. Exit For puede aparecer tantas veces como desee en el cuerpo del bucle.</p><p>Ilustremos el uso de For Each ... Next con el siguiente código, que muestra una lista de archivos del directorio raíz de la unidad c: \</p><p>Dim fso, f, f1, fc, s Establecer fso = CreateObject ("Scripting.FileSystemObject") Establecer f = fso.GetFolder ("c: \") Establecer fc = f.Files For Each f1 in fc s = s & f1 .name & vbNewLine Next Application.MessageBox s, "Archivos en c: \", vbOkOnly</p><h3>Procedimientos</h3> <p>Para ahorrar memoria y estructurar el programa, un fragmento de código que se llama repetidamente en diferentes lugares puede formatearse como un procedimiento. Hay dos tipos de procedimientos en VBScript: Subs y Funciones. Una subrutina es una secuencia de declaraciones rodeadas por las palabras clave Sub y End Sub. La subrutina puede aceptar parámetros como entrada, pero no devuelve un valor. Una función, una secuencia de declaraciones encerradas entre una función y una función final, devuelve un resultado y, por lo tanto, se puede usar en una expresión. Cada procedimiento debe tener un nombre único dentro del módulo. Los nombres de los procedimientos declarados en el módulo global deben ser únicos en todo el proyecto.</p><p>La definición de una subrutina y una función tiene la siguiente sintaxis:</p><p>| Privado] Subnombre [(arglist)] End Sub | Privado] Nombre de la función [(arglist)] Finalizar función</p><p>Los procedimientos públicos son globales y están disponibles en todos los guiones del programa. Los procedimientos privados están disponibles solo en el script donde se declararon. A menos que se indique lo contrario, el procedimiento declarado está a disposición del público. La palabra clave predeterminada se puede usar solo en el cuerpo de la clase y sirve para indicar el método predeterminado de esta clase.</p><p>La lista de parámetros tiene la siguiente sintaxis:</p><p>Varname [, ...]</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. Constantes, los resultados de la evaluación de expresiones solo se pueden pasar por valor. Cambiar el parámetro pasado por referencia cambiará el valor de la variable externa. Expliquemos la transferencia de parámetros al procedimiento usando el siguiente ejemplo:</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 del procedimiento DoCalculation" V1 = 20 "V2 = 2 End Sub</p><p>Las variables declaradas dentro del cuerpo de un procedimiento son locales y se destruyen cuando completa su ejecución. Los valores de las variables locales no se guardan.</p><p>La lista de parámetros se indica entre paréntesis cuando se llama a una función o cuando se llama a una subrutina utilizando el operador de llamada. Entonces, podríamos escribir la llamada del procedimiento DoCalculation en el ejemplo anterior de la siguiente manera:</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, a las que llamaremos clases VB a continuación. En términos generales, no son clases completas en la comprensión de la programación orientada a objetos, ya que no admiten la herencia y, en consecuencia, el polimorfismo. Entonces, de las tres ballenas en las que se basa el paradigma orientado a objetos, solo queda la encapsulación: la capacidad de combinar datos y métodos dentro de una entidad.</p><p>La definición de una clase se lleva a cabo utilizando la siguiente construcción:</p><p>Declaraciones de nombre de clase End Class</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 conocidas como miembros de la clase. Tenga en cuenta que, a diferencia de Delphi, donde el código de definición de clase contiene solo declaraciones de funciones y procedimientos, en una clase VB, el código de miembro se escribe directamente en el texto de la clase.</p><p>Los miembros de la clase pueden declararse privados o públicos. Los primeros son visibles solo dentro del código de esta clase, mientras que los segundos están disponibles tanto para el código interno como para el exterior. Si una variable o función (procedimiento) no contiene una definición explícita de Público o Privado, entonces se consideran públicos. Los procedimientos o funciones declarados como Públicos dentro de un bloque de clase se convierten en métodos de esta clase.</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>Anteriormente, ya dijimos que los campos de una clase, ya sean declarados explícitamente o no explícitamente como Públicos, se convierten en sus propiedades. Además, puede crear una propiedad de clase definiendo funciones especiales para leer el valor de la propiedad (Property Get), así como para asignarlo (Property Let o Property Set).</p><p>La sintaxis para definir tales funciones es la siguiente:</p><p>| Privado] Propiedad Obtener nombre [(arglist)] [nombre = expresión] [nombre = expresión] Propiedad final Propiedad Let name (valor) Propiedad final Propiedad Nombre del conjunto (referencia) Propiedad final</p><p>Al definir solo una función, lectura o asignación, puede crear una propiedad de solo lectura o de solo escritura, respectivamente. El procedimiento Property Let se usa para asignar tipos de datos simples, y el procedimiento Property Set se usa para pasar una referencia de objeto. Tenga en cuenta que las tres funciones pueden aceptar una lista de parámetros arbitraria como entrada. Así es como puede organizar, por ejemplo, las propiedades de la matriz pasando el índice del elemento como argumento.</p> <h4><span>Creando y destruyendo una instancia de una clase VB</span></h4> <p>Se crea una instancia de una clase VB utilizando el operador New.</p><p>Dim X Set X = Nuevo nombre de clase</p><p>La destrucción de una instancia creada previamente ocurre automáticamente al completar el bloque de código donde se declaró la variable correspondiente y siempre que no existan referencias externas a la misma. Si necesita destruir manualmente la instancia, debe asignar el valor Nothing a la variable.</p><p>'Declarando una variable y creando una instancia de la clase Dim X Set X = New classname ...' usando una instancia de la clase ... 'destruyendo una instancia de la clase Set X = Notning ...</p><h4><span>Inicializar y finalizar eventos</span></h4> <p>El evento Initialize ocurre cuando se crea una instancia de la clase y Terminate cuando se destruye. El desarrollador puede definir sus propios controladores de datos de eventos. A continuación se muestra un ejemplo del uso de los eventos de creación y eliminación de un objeto:</p><p>Clase TestClass "Defina el controlador de eventos Initialize. Private Sub Class_Initialize MsgBox (" TestClass iniciado ") End Sub" Defina el controlador de eventos Terminate. Private Sub Class_Terminate MsgBox ("TestClass terminated") End Sub End Class "Crea una instancia de la clase TestClass." El mensaje "TestClass inició" Set X = New TestClass "Destruye la instancia." El mensaje "TestClass terminó" Set X = Nada</p> <p>Algo que corrí completamente por delante y no te conté de dos <b>funciones del cuadro de diálogo: MsgBox y InputBox</b>... En este pequeño tutorial, te contaré todo el pribluda para estas dos funciones. También hay otras formas de crear cuadros de diálogo, pero esto requerirá <b>Objetos WSH</b>, que se discutirá en las próximas lecciones.</p> <h2>Función MsgBox</h2> <p>La función más común para mostrar un mensaje. Por supuesto que es más difícil que <b>Objeto de eco WScript</b>, pero tampoco necesita un objeto. <br><i>Sintaxis:</i> <b>MsgBox (Solicitud [, Botones] [, Título] [, Archivo de ayuda, Contexto])</b></p> <ul><li><b>Inmediato</b>- Mensaje de texto.</li> <li><b>Botones</b>- Botones de salida y modo ventana.</li> <li><b>Título</b>- El nombre de la ventana.</li> <li><b>Archivo de ayuda</b>- archivo de ayuda (* .hlp)</li> <li><b>Contexto</b>- Número de la sección de ayuda.</li> </ul><p>Parámetro <b>Botones</b> puede tomar varios valores al mismo tiempo. Para indicarlos, use el signo "+" o simplemente use la suma de los valores. Los valores de este parámetro se muestran a continuación.</p> <h3>Constantes del cuadro de diálogo (botones de salida):</h3> <ul><li><b>vbOKOnly</b>- Valor 0. Visualice el botón Aceptar.</li> <li><b>vbOKCancel</b>- Valor 1. Botones de visualización: Aceptar y Cancelar.</li> <li><b>vbAbortRetryIgnore</b>- Valor 2. Botones de visualización: Abortar, Repetir y Saltar.</li> <li><b>vbYesNoCancel</b>- Valor 3. Mostrar botones: Sí, No y Cancelar.</li> <li><b>vb Sí No</b>- Valor 4. Botones de visualización: Sí y No.</li> <li><b>vbRetryCancel</b>- Valor 5. Botones de visualización: Rehacer y Cancelar.</li> </ul><h3>Constantes del cuadro de diálogo (iconos visualizables):</h3> <ul><li><b>vbCritical</b>- Valor 16. Muestre el icono de la marca de parada.</li> <li><b>vbQuestion</b>- Valor 32. Muestre el icono de signo de interrogación.</li> <li><b>vbExclamación</b>- Valor 48. Muestra el icono de signo de exclamación.</li> <li><b>vbInformación</b>- Valor 64. Muestra el icono de la marca de información.</li> </ul><h3>Constantes del cuadro de diálogo (botones predeterminados):</h3> <ul><li><b>vbDefaultButton1</b>- Valor 0. El primer botón está seleccionado por defecto.</li> <li><b>vbDefaultButton2</b>- Valor 256. El segundo botón está seleccionado por defecto.</li> <li><b>vbDefaultButton3</b>- Valor 512. El tercer botón está seleccionado por defecto.</li> <li><b>vbDefaultButton4</b>- Valor 768. El cuarto botón está seleccionado por defecto.</li> </ul><h3>Constantes del cuadro de diálogo (modo ventana):</h3> <ul><li><b>vbApplicationModal</b>- Valor 0. Se muestra en modo modal.</li> <li><b>vbSystemModal</b>- El valor es 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>Cabe señalar que el parámetro <b>Botones</b> no puede aceptar varios valores de la misma categoría. Estos valores simplemente se sumarán. Es decir, no podrá instalar varios conjuntos de botones o iconos al mismo tiempo.</p> <p>"Lección Nº 16 de VBScript:" Function MsgBox y InputBox "file_1.vbs" ******************************* *********************** MsgBox "Hola", 5 + 16, "Título" MsgBox "Hola", vbRetryCancel + 16, "Título" MsgBox "Hola ", vbRetryCancel + 524288," Título "MsgBox" Hola ", vbAbortRetryIgnore + vbInformation + vbDefaultButton2 + vbSystemModal + 524288," Título "MsgBox" Hola ", 528706," Título "</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 n. ° 16 de VBScript:</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 presionar botones. Puede asignarse a una variable y así determinar el botón pulsado.</p> <h3>Resultado devuelto de botones presionados (constantes):</h3> <ul><li><b>vbOK</b>- Valor 1. Botón Aceptar.</li> <li><b>vbCancel</b>- Valor 2. Botón Cancelar.</li> <li><b>vbAbort</b>- Valor 3. Botón Abortar.</li> <li><b>vbRetry</b>- Valor 4. Botón Repetir.</li> <li><b>vbIgnore</b>- Valor 5. Botón Omitir.</li> <li><b>vb Sí</b>- Valor 6. Botón Sí.</li> <li><b>vb No</b>- Valor 7. Botón No.</li> </ul><p>"********************************************** * ****** "Lección # 16 de VBScript:" Función MsgBox y InputBox "file_2.vbs" ************************** * ***************************** Dim Knopka Knopka = MsgBox ("Presione cualquier botón", 2, "Título") Si Knopka = 3 Luego MsgBox "Presionó el botón - Abortar" ElseIf Knopka = 4 Luego MsgBox "Presionó el botón - Repita" Else MsgBox "Presionó el botón - Saltar" Fin si</p> <p>"********************************************** * ****** "Lección # 16 de VBScript:" Función MsgBox y InputBox "file_4.vbs" ************************** * ***************************** Dim Dict, AboutBomb Set Dict = CreateObject ("Scripting.Dictionary") Dict.CompareMode = 1 Dict .Agregue "Amarillo", "¡La bomba explotó!" Dict.Agregue "Rojo", "¡Desactivó la bomba!" Dict.Agregue "Azul", "¡La bomba explotó!" Dict.Agregue "Verde", "La bomba explotó ! "AboutBomb = InputBox (" ¡Bomba detectada! ¿Qué cable cortar: amarillo, rojo, azul o verde? "," ¡¡¡Bomba detectada !!! "," Ingrese el color del cable aquí ... ") Si el diccionario existe (AboutBomb) luego MsgBox Dict.Item (AboutBomb) else MsgBox "¡Tu vista es mala! ¡No existe tal cable! ¡¡¡La bomba explotó !!! "finaliza si</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> <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> <aside class="col-lg-4 col-md-12 col-md-offset-4 col-lg-offset-0" id="right"> <div> </div> <br/> <div> </div> <br/> <div> </div> <br/> <div> </div> <br/> </aside> </div> </div> </div> <div class="popup" id="share"> <div class="perfect-scroll" style="text-align: center"> <div style="margin-bottom: 20px"> <strong>La descarga comenzará ahora ...</strong> <br>No olvides compartir material <br>en las redes sociales con tu <br>colegas</div> <div> <div class="ya-share2" data-services="vkontakte,facebook,odnoklassniki,moimir,gplus" data-counter=""></div> </div> </div> <div class="close-pop pull-right"> <svg width="10px" height="10px" viewBox="0 0 10 10"> <path fillrule="evenodd" d="M 6.41 5C 6.41 5 9.24 7.83 9.24 7.83 9.63 8.22 9.63 8.85 9.24 9.24 8.85 9.63 8.22 9.63 7.83 9.24 7.83 9.24 5 6.41 5 6.41 5 6.41 2.17 9.24 2.17 9.24 1.78 9.63 1.15 9.63 0.76 9.24 0.37 8.85 0.37 8.22 0.76 7.83 0.76 7.83 3.59 5 3.59 5 3.59 5 0.76 2.17 0.76 2.17 0.37 1.78 0.37 1.15 0.76 0.76 1.15 0.37 1.78 0.37 2.17 0.76 2.17 0.76 5 3.58 5 3.58 5 3.58 7.83 0.76 7.83 0.76 8.22 0.37 8.85 0.37 9.24 0.76 9.63 1.15 9.63 1.78 9.24 2.17 9.24 2.17 6.41 5 6.41 5Z"></path> </svg> </div> </div> <section id="views"> <div class="container"> </div> </section> <script type="text/javascript"> $(document).ready( function () { $('.kursiv').readmore({ speed: 75, maxHeight: 84, heightMargin: 16, moreLink: '<a href="#"><span>Показать полностью</span>', lessLink: '<a href="#"><span>Скрыть</span></a>', } ); } ); </script> <style> div.kursiv { margin-bottom: 0; } #razrabotka { margin-top: 30px; } .readmore-js-toggle { font-style: italic; color: #999; display: inline; margin-right: 10px; font-size: 14px; cursor: pointer; border-bottom: 1px dotted #e6e6e6; } </style></section> <footer> <div class="container"> <div class="row"> <div class="col-xs-16 col-sm-4 col-md-3"> <p>© 2021, mkr-novo2.ru, Internet. Educación. Programas. Firmware. Instalacion y configuracion. Navegantes</p> <div class="social"> <a target="_blank" href=""> <svg width="32px" height="19px" viewBox="0 0 32 19"> <path fillRule="evenodd" d="M 15.36 18.01C 15.36 18.01 17.24 18.01 17.24 18.01 17.24 18.01 17.81 17.94 18.1 17.64 18.36 17.37 18.35 16.85 18.35 16.85 18.35 16.85 18.32 14.41 19.49 14.05 20.64 13.7 22.12 16.4 23.69 17.45 24.87 18.23 25.77 18.06 25.77 18.06 25.77 18.06 29.97 18.01 29.97 18.01 29.97 18.01 32.16 17.87 31.12 16.21 31.03 16.07 30.51 14.97 28 12.72 25.37 10.35 25.72 10.74 28.89 6.65 30.82 4.16 31.59 2.65 31.35 2 31.12 1.38 29.7 1.54 29.7 1.54 29.7 1.54 24.98 1.57 24.98 1.57 24.98 1.57 24.63 1.52 24.37 1.67 24.12 1.82 23.95 2.16 23.95 2.16 23.95 2.16 23.21 4.09 22.21 5.72 20.11 9.18 19.27 9.36 18.92 9.15 18.12 8.65 18.32 7.14 18.32 6.07 18.32 2.72 18.85 1.32 17.3 0.96 16.79 0.84 16.41 0.76 15.1 0.75 13.41 0.73 11.99 0.76 11.18 1.14 10.64 1.39 10.23 1.96 10.48 1.99 10.79 2.03 11.5 2.18 11.88 2.67 12.36 3.31 12.34 4.74 12.34 4.74 12.34 4.74 12.62 8.68 11.69 9.17 11.06 9.5 10.18 8.82 8.31 5.68 7.35 4.08 6.62 2.3 6.62 2.3 6.62 2.3 6.48 1.97 6.23 1.8 5.93 1.58 5.51 1.51 5.51 1.51 5.51 1.51 1.02 1.54 1.02 1.54 1.02 1.54 0.35 1.56 0.1 1.84-0.12 2.09 0.08 2.62 0.08 2.62 0.08 2.62 3.6 10.57 7.57 14.57 11.22 18.25 15.36 18.01 15.36 18.01 15.36 18.01 15.36 18.01 15.36 18.01Z"/> </svg> </a> <a target="_blank" href=""> <svg viewBox="0 0 25 25" width="25px" height="25px"> <path class="st0" d="M12.5,12.7c3.2,0,5.8-2.6,5.8-5.8c0-3.2-2.6-5.8-5.8-5.8C9.3,1,6.7,3.6,6.7,6.8C6.7,10,9.3,12.7,12.5,12.7z M12.5,3.9c1.6,0,2.9,1.3,2.9,2.9c0,1.6-1.3,2.9-2.9,2.9c-1.6,0-2.9-1.3-2.9-2.9C9.6,5.2,10.9,3.9,12.5,3.9z M19.2,13.4 c-0.3-0.7-1.2-1.2-2.5-0.3c-1.6,1.3-4.3,1.3-4.3,1.3s-2.6,0-4.3-1.3c-1.2-1-2.1-0.4-2.5,0.3c-0.6,1.2,0.1,1.7,1.5,2.7 c1.3,0.8,3,1.1,4.1,1.2l-0.9,0.9c-1.3,1.3-2.6,2.6-3.4,3.4c-0.5,0.5-0.5,1.4,0,1.9l0.2,0.2c0.5,0.5,1.4,0.5,1.9,0l3.4-3.4 c1.3,1.3,2.6,2.6,3.4,3.4c0.5,0.5,1.4,0.5,1.9,0l0.2-0.2c0.5-0.5,0.5-1.4,0-1.9l-3.4-3.4l-0.9-0.9c1.1-0.1,2.8-0.4,4.1-1.2 C19.2,15.1,19.8,14.5,19.2,13.4z"/> </svg> </a> <a target="_blank" href="https://facebook.com/"> <svg width="26px" height="25px" viewBox="0 0 26 25"> <path fillRule="evenodd" d="M 24.33-0C 24.33-0 1.96-0 1.96-0 1.19-0 0.57 0.62 0.57 1.38 0.57 1.38 0.57 23.62 0.57 23.62 0.57 24.38 1.19 25 1.96 25 1.96 25 14 25 14 25 14 25 14 15.32 14 15.32 14 15.32 10.72 15.32 10.72 15.32 10.72 15.32 10.72 11.54 10.72 11.54 10.72 11.54 14 11.54 14 11.54 14 11.54 14 8.76 14 8.76 14 5.53 15.98 3.77 18.88 3.77 20.27 3.77 21.46 3.88 21.81 3.92 21.81 3.92 21.81 7.3 21.81 7.3 21.81 7.3 19.8 7.3 19.8 7.3 18.22 7.3 17.92 8.04 17.92 9.13 17.92 9.13 17.92 11.54 17.92 11.54 17.92 11.54 21.68 11.54 21.68 11.54 21.68 11.54 21.19 15.32 21.19 15.32 21.19 15.32 17.92 15.32 17.92 15.32 17.92 15.32 17.92 25 17.92 25 17.92 25 24.33 25 24.33 25 25.09 25 25.71 24.38 25.71 23.62 25.71 23.62 25.71 1.38 25.71 1.38 25.71 0.62 25.09-0 24.33-0Z"/> </svg> </a> <a target="_blank" href="https://youtube.com/"> <svg width="26px" height="19px" viewBox="0 0 26 19"> <path fillRule="evenodd" d="M 25.75 14.46C 25.75 14.46 25.5 16.18 24.75 16.93 23.79 17.92 22.72 17.93 22.23 17.99 18.71 18.24 13.43 18.25 13.43 18.25 13.43 18.25 6.89 18.19 4.88 18 4.32 17.89 3.06 17.92 2.11 16.93 1.35 16.18 1.11 14.46 1.11 14.46 1.11 14.46 0.86 12.45 0.86 10.44 0.86 10.44 0.86 8.55 0.86 8.55 0.86 6.54 1.11 4.52 1.11 4.52 1.11 4.52 1.35 2.81 2.11 2.05 3.06 1.06 4.14 1.06 4.63 1 8.15 0.75 13.42 0.75 13.42 0.75 13.42 0.75 13.43 0.75 13.43 0.75 13.43 0.75 18.71 0.75 22.23 1 22.72 1.06 23.79 1.06 24.75 2.05 25.5 2.81 25.75 4.52 25.75 4.52 25.75 4.52 26 6.54 26 8.55 26 8.55 26 10.44 26 10.44 26 12.45 25.75 14.46 25.75 14.46ZM 10.83 5.73C 10.83 5.73 10.83 12.72 10.83 12.72 10.83 12.72 17.62 9.24 17.62 9.24 17.62 9.24 10.83 5.73 10.83 5.73Z"/> </svg> </a> </div> </div> <div class="col-lg-2 col-sm-4 col-xs-16 links"> <h4>mkr-novo2.ru</h4> <a href="https://mkr-novo2.ru/es/category/internet/">Internet</a> <a href="https://mkr-novo2.ru/es/category/multimedia/">Multimedia</a> <a href="https://mkr-novo2.ru/es/category/navigation/">Navegantes</a> <a href="https://mkr-novo2.ru/es/category/education/">Educación</a> <a href="https://mkr-novo2.ru/es/category/at/">SOBRE</a> <a href="https://mkr-novo2.ru/es/category/problems/">Problemas</a> </div> <div class="col-lg-2 col-sm-3 col-xs-16 links"> <h4>sobre el proyecto</h4> <a href="">Realimentación</a> <a href="">Sobre el sitio</a> </div> <div class="col-lg-5 col-sm-1 col-xs-16 links"></div> <div class="col-lg-4 col-sm-5 col-xs-16 links"> </div> </div> <div class="row v-center"> <div class="col-md-8 col-xs-16"> <a data-fancybox data-type="iframe" data-src="">Contactos</a> </div> <div class="col-md-8 col-xs-16"> <div class="share pull-right"> <script type="text/javascript" src="//yastatic.net/es5-shims/0.0.2/es5-shims.min.js" charset="utf-8"></script> <script type="text/javascript" src="//yastatic.net/share2/share.js" charset="utf-8"></script> <div class="ya-share2" data-services="vkontakte,facebook,odnoklassniki,moimir,gplus" data-counter=""></div> </div> </div> </div> </div> </footer> <a href="#bot" id="to-top"> <svg width="50px" height="50px" viewBox="0 0 50 50"> <circle cx="25.00" cy="25.00" r="25.00" fill="rgb(0,0,0)" opacity="0.37"/> <path fillRule="evenodd" d="M 33.94 24.46C 33.94 24.46 25.89 16.3 25.89 16.3 25.32 15.73 24.41 15.73 23.84 16.3 23.84 16.3 15.79 24.46 15.79 24.46 14.88 25.38 15.52 26.97 16.81 26.97 16.81 26.97 20.43 26.97 20.43 26.97 21.23 26.97 21.88 27.62 21.88 28.43 21.88 28.43 21.88 32.51 21.88 32.51 21.88 33.71 22.83 34.68 24.01 34.68 24.01 34.68 25.72 34.68 25.72 34.68 26.9 34.68 27.86 33.71 27.86 32.51 27.86 32.51 27.86 28.43 27.86 28.43 27.86 27.62 28.5 26.97 29.31 26.97 29.31 26.97 32.92 26.97 32.92 26.97 34.21 26.97 34.85 25.38 33.94 24.46Z" fill="rgb(241,241,241)"/> </svg> </a> <div class="overlay"></div> <div class="popup" id="password"> <div class="perfect-scroll"> <h2>Recuperación de contraseña <div class="close-pop pull-right"> <svg width="10px" height="10px" viewBox="0 0 10 10"> <path fillRule="evenodd" d="M 6.41 5C 6.41 5 9.24 7.83 9.24 7.83 9.63 8.22 9.63 8.85 9.24 9.24 8.85 9.63 8.22 9.63 7.83 9.24 7.83 9.24 5 6.41 5 6.41 5 6.41 2.17 9.24 2.17 9.24 1.78 9.63 1.15 9.63 0.76 9.24 0.37 8.85 0.37 8.22 0.76 7.83 0.76 7.83 3.59 5 3.59 5 3.59 5 0.76 2.17 0.76 2.17 0.37 1.78 0.37 1.15 0.76 0.76 1.15 0.37 1.78 0.37 2.17 0.76 2.17 0.76 5 3.58 5 3.58 5 3.58 7.83 0.76 7.83 0.76 8.22 0.37 8.85 0.37 9.24 0.76 9.63 1.15 9.63 1.78 9.24 2.17 9.24 2.17 6.41 5 6.41 5Z"/> </svg> </div> </h2> <div class="recover-success"> <form action="/recovery/request" data-method="post" method="post" class="recover_form"> <p>¡Ingrese su correo electrónico para recuperar su contraseña!</p> <div class="input-wrp"> <input name="email" type="text" placeholder="Introduce tu correo electrónico"> </div> <input type="submit" data-disable-with="Отправить..." class="btn green" value="enviar"> </form> </div> <div class="auth-form_error" style="padding-top: 10px"></div> </div> </div> <script> $('.user.one').click(function (e, ob) { $('.user').removeClass('active-user'); $('.user.one').addClass('active-user'); $('#user_type').val('1'); e.stopPropagation(); } ); $('.user.two').click(function (e, ob) { $('.user').removeClass('active-user'); $('.user.two').addClass('active-user'); $('#user_type').val('2'); e.stopPropagation(); } ); $('.user.three').click(function (e, ob) { $('.user').removeClass('active-user'); $('.user.three').addClass('active-user'); $('#user_type').val('3'); e.stopPropagation(); } ); function clearErrors() { $('.auth-form_error').each(function () { $(this).html(''); } ); } $('body').on('click', '.open-login-form', function (e) { $('#register, .overlay').removeClass('visible-pop'); $('#login, .overlay').addClass('visible-pop'); e.preventDefault(); } ); $('body').on('click', '.open-pass-form', function (e) { $('#register, .overlay').removeClass('visible-pop'); $('#password, .overlay').addClass('visible-pop'); e.preventDefault(); } ); $('.login_form') .on('ajax:beforeSend', function (event, xhr, settings) { clearErrors(); } ) .on('ajax:complete', function (event, xhr, status) { } ) .on('ajax:success', function (event, data, status, xhr) { if (data.status == 0) { $('.auth-form_error').html(data.text + '<br>'); } else { $('.open-register').html(data.text); var delay = 1000; window.location.href = url = window.location.href + "?login=ok"; location.replace(url); setTimeout('window.location.reload(true);', delay); } } ).on('ajax:error', function (event, xhr, status, error) { } ); $('.recover_form') .on('ajax:beforeSend', function (event, xhr, settings) { clearErrors(); } ) .on('ajax:complete', function (event, xhr, status) { } ) .on('ajax:success', function (event, data, status, xhr) { console.log(data); if (data.status == 0) { $('.auth-form_error').html(data.text + '<br>'); } else { $('.recover-success').html('<div class="success" >' + data.text + '</div>'); } } ).on('ajax:error', function (event, xhr, status, error) { } ); $('.registration_form') .on('ajax:beforeSend', function (event, xhr, settings) { var emailError = $('#emailError'); var passwordError = $('#passwordError'); var passwordVerify = $('#passwordVerifyError'); var userTypeError = $('#userTypeError'); var emailExist = $('#emailExist'); emailError.html(''); passwordError.html(''); passwordVerify.html(''); userTypeError.html(''); emailExist.hide(); } ) .on('ajax:complete', function (event, xhr, status) { } ).on('ajax:success', function (event, data, status, xhr) { // insert the failure message inside the "#account_settings" element //console.log(data); if (data.status == 0) { //$('.reg-info').html('<div class="error">' + data.text + '</div>'); if (data.text.email) { var emailError = $('#emailError'); var emailExist = $('#emailExist'); console.log(data.text.email); if (data.text.email == 'Найдена совпадающая со значением запись') { console.log('alert'); emailExist.show(); } else { emailError.html('<i class="icon-error"></i><div class="error_note_wrapper">' + '<div class="error_note">' + '<span class="error_note_text">' + data.text.email + '</span></div></div>'); } } if (data.text.password) { var passwordError = $('#passwordError'); console.log(data.text.password); passwordError.html('<i class="icon-error"></i><div class="error_note_wrapper">' + '<div class="error_note">' + '<span class="error_note_text">' + data.text.password + '</span></div></div>'); } if (data.text.passwordVerify) { var passwordVerify = $('#passwordVerifyError'); console.log(data.text.passwordVerify); passwordVerify.html('<i class="icon-error"></i><div class="error_note_wrapper">' + '<div class="error_note">' + '<span class="error_note_text">' + data.text.passwordVerify + '</span></div></div>'); } if (data.text.captcha) { var captcha = $('#captchaError'); console.log(data.text.captcha); captcha.html('<i class="icon-error"></i><div class="error_note_wrapper">' + '<div class="error_note">' + '<span class="error_note_text">' + data.text.captcha + '</span></div></div>'); } if (data.text.userType) { var user_type = $('#userTypeError'); console.log(data.text.userType); user_type.html('<i class="icon-error"></i><div class="error_note_wrapper">' + '<div class="error_note">' + '<span class="error_note_text">' + data.text.userType + '</span></div></div>'); } } else { $('.reg-success').html(data.text); var delay = 2000; window.location.href = url = window.location.href + "?reg=ok"; location.replace(url); setTimeout('window.location.reload(true);', delay); } } ).on('ajax:error', function (event, xhr, status, error) { } ); </script> <div class="popup" id="premium-pop"> </div> <link rel="stylesheet" href="/videouroki/res/lightslider/lightslider.min.css"> <link rel="stylesheet" href="/videouroki/res/perfectScrollbar/perfect-scrollbar.css"> <link rel="stylesheet" href="/videouroki/assets/font-awesome/css/font-awesome.min.css"> <link rel="stylesheet" href="/assets/vendor/fancybox/jquery.fancybox.min.css"> <script src="/videouroki/res/perfectScrollbar/perfect-scrollbar.jquery.min.js"></script> <script src="/js/rails.js"></script> <script src="/videouroki/res/lightslider/lightslider.min.js"></script> <script src="/videouroki/res/jquery.validate.min.js"></script> <script src="/videouroki/res/autosize-master/autosize.min.js"></script> <script src="/videouroki/js/tabs.js"></script> <script src="/videouroki/js/select.js"></script> <script src="/videouroki/js/global.js?2109"></script> <script src="/videouroki/js/views.js"></script> <script src="/videouroki/plugin/notify/notify.min.js"></script> <script src="/videouroki/plugin/notify/notify-metro.js"></script> <script src="/videouroki/js/lazyload.min.js"></script> <script src="/assets/vendor/fancybox/jquery.fancybox.min.js"></script> <script type="text/javascript"> $(document).ready( function () { // new LazyLoad(); } ) </script> <!--[if gte IE 9]><script type="text/javascript" src="/videouroki/assets/ckeditor-mini/ckeditor.js"></script><![endif]--> <script type="text/javascript" src="/videouroki/js/readmore.js"></script></body> </html>