etiquetas. El uso literal de " " o "
Un archivo Windows Script ( WSF ) es un tipo de archivo utilizado por Microsoft Windows Script Host . Permite mezclar los lenguajes de script JScript y VBScript en un solo archivo, u otros lenguajes de script como Perl , Object REXX , Python o Kixtart si el usuario los instala. Estos tipos de scripts también se pueden utilizar para vincular muchos otros scripts externos entre sí mediante un src
parámetro en la <script>
etiqueta de forma similar a HTML . Los archivos Windows Script tienen la extensión ".WSF"
. Un WSF hace referencia a cada módulo de script en una jerarquía XML muy básica como se muestra a continuación, adhiriéndose a esos estándares fuera de las <script>
etiquetas. El uso literal de " </script>
" o " <script>
" dentro de las <script>
etiquetas y desafíos similares se pueden manejar mediante el uso de CDATA , como se muestra en los ejemplos.
Un WSF puede ser útil para aislar errores. Su naturaleza modular evita que una referencia de script interfiera con otra. A continuación se muestra un ejemplo de WSF con un módulo que produce un error y otro que no:
<?xml version="1.0" ?> <job id= "Funciona parcialmente" > <!-- Esto no funcionará --> <script language= "VBScript" > ' <![CDATA[ WScript . echo 4 / 0 ' ¡Vaya! No se puede dividir por cero... ' ]]> </script> <!-- Esto funcionará... definitivamente... --> <script language= "VBScript" > ' <![CDATA[ WScript . echo "Hola, programadores!" & vbNewline & _ "¡Fantástico! ¡Funcionó!" ' ]]> </script> </job>
El primer módulo de script generará un error de "división por cero". Normalmente, esto provocaría que el script finalice en Windows Script Host , pero este método modular permite que el script continúe y ejecute el segundo módulo de script.
Un archivo Windows Script admite varios idiomas, como se describe en la referencia de Windows Script Host . Una de las características de este formato de archivo es que puede utilizar más de uno a la vez. Esto significa que puede hacer que un lenguaje de script utilice código de otro lenguaje de script. El ejemplo más memorable para los usuarios de VBScript de larga data es el uso de Microsoft JScript para atender una solicitud de ordenación para VBScript, ya que no tiene una función de ordenación incorporada para una matriz de valores. Los usuarios de VBScript pueden escribir su propio método de ordenación o tomar prestado uno de un objeto existente como un conjunto de registros ADO ( ActiveX Data Objects ) o una ArrayList .NET ( .NET Framework ) , pero la forma más rápida de ordenar una matriz es utilizar el método integrado en JScript . Aquí hay un ejemplo básico de cómo funciona:
<?xml version="1.0" ?> <!-- Mezcla de JScript y VBScript --> <job id= "SORT-VBScriptWithJScript" > <script language= "JScript" > function SortVBArray ( arrVBArray ) { return arrVBArray.toArray (). sort () ; } </script> <script language= "VBScript" > ' < ![CDATA[ '** Ordenación más rápida : llamar a la ordenación de Jscript desde VBScript myData = "a,b,c,1,2,3,X,Y,Z,p,d,q" wscript.echo " Lista original de valores: " & vbTab & myData starttime = timer () sortedArray = SortVBArray ( split ( myData , " ," )) endtime = timer () jscriptTime = round ( endtime - starttime , 2 ) wscript . echo "JScript ordenado en " & jscriptTime & " segundos: " & vbTab & sortedArray ' ]]> </script> </job>
La salida se ve así, ordenada por secuencia de código ASCII :
Lista original de valores: a,b,c,1,2,3,X,Y,Z,p,d,q JScript ordenado en 0 segundos: 1,2,3,X,Y,Z,a,b,c,d,p,q
Otra característica muy útil de un WSF es que el contenedor XML se puede vincular a una referencia de objeto o control para que puedas usar las constantes de ese objeto en lugar de tener que declararlas. En los archivos VBScript y JScript normales , estarías obligado a declarar el valor de una constante (fuera de los que son internos al Windows Script Host ) para poder usar la constante. A continuación se muestra un ejemplo de esto:
const adLockBatchOptimistic = 4 MsgBox "El valor de ""adLockBatchOptimistic"" es " & _ adLockBatchOptimistic & "." , vbInformation , "adLockBatchOptimistic"
Si la documentación de su objeto solo hace referencia al nombre de la constante y no al valor de la misma, no tendrá forma de saber el valor sin la ayuda de un entorno de desarrollo integrado que le indique a qué equivale. Al utilizar la declaración de referencia WSF, puede utilizar las constantes sin declarar sus valores. El siguiente ejemplo enumera los valores de varias constantes comunes en el conjunto de registros ADO ( ActiveX Data Objects ) .
<?xml version="1.0" ?> <!-- Ejemplo de WSF con referencia de objeto Notas para este ejemplo muy formal: CDATA se utiliza para ayudar al analizador XML a ignorar caracteres especiales en el contenido del script. La apertura y el cierre de CDATA deben ocultarse de VBScript convirtiéndolos en comentarios. --> <paquete> < id de trabajo= "EnumerateConstantsADO" > < objeto de referencia= "ADODB.Recordset" /> < lenguaje de script= "VBScript" > ' <![CDATA[ dim título , str , i ctecArray = Array ( "adOpenUnspecified" , "adOpenForwardOnly" , _ "adOpenKeyset" , "adOpenDynamic" , "adOpenStatic" ) título = "Valores de conjunto de registros ADO para constantes" str = título & vbNewLine & vbNewLine str = str & "*Constantes CursorTypeEnum*" & vbNewLine Para i = 0 a ubound ( ctecArray ) str = str & Eval ( ctecArray ( i )) & vbTab & ctecArray ( i ) & vbNewLine Siguiente str = str & vbNewLine str = str & "*Constantes LockTypeEnum*" y vbNewLine ltecArray = Array ( "adLockUnspecified" , "adLockReadOnly" , _ "adLockPessimistic" , "adLockOptimistic" ,_ "adLockBatchOptimistic" ) Para i = 0 a ubound ( ltecArray ) str = str & Eval ( ltecArray ( i )) & vbTab & ltecArray ( i ) & vbNewLine Siguiente MsgBox str , vbInformation , Título ' ]]> </script> </trabajo> </paquete>
Ejecutar el script anterior desde un archivo con una ".WSF"
extensión, como una denominada "EnumerateConstantsADO.wsf"
, producirá el resultado que se muestra a continuación:
Valores de conjuntos de registros ADO para constantes*Constantes CursorTypeEnum* -1 adOpenUnspecified 0 adOpenForwardOnly 1 adOpenKeyset 2 adOpenDynamic 3 adOpenStatic*Constantes LockTypeEnum* -1 adLockUnspecified 1 adLockReadOnly 2 adLockPessimistic 3 adLockOptimistic 4 adLockBatchOptimistic
Además, el uso de la referencia de objeto para exponer las constantes hace que escribir el script sea más parecido a escribir en un lenguaje de programación estándar. De hecho, el contenido del script de ejemplo, escrito en VBScript, se compilará en un programa de Visual Basic y se ejecutará de la misma manera siempre que ese programa use la misma referencia a ADODB.