Windows script-fil - Windows Script File

Windows script-fil
Filnavnetudvidelse .wsf
Udviklet af Microsoft
Type format Scripting
Beholder til Scripts

En Windows Script File ( WSF ) er en filtype, der bruges af Microsoft Windows Script Host . Det giver mulighed for at blande scriptingssprog JScript og VBScript i en enkelt fil eller andre scripting sprog som Perl , Object REXX , Python eller Kixtart, hvis det er installeret af brugeren. Disse typer scripts kan også bruges til at knytte mange andre eksterne scripts sammen ved hjælp af en srcparameter på <script>tagget på en måde, der ligner HTML . Windows-scriptfiler har udvidelsen ".WSF". En WSF henviser til hvert scriptmodul i et meget grundlæggende XML- hierarki som vist nedenfor og overholder disse standarder uden for <script>tags. Bogstavelig brug af "</script>" eller "<script>" i dine <script>tags og lignende udfordringer kan håndteres ved hjælp af CDATA , som vist i eksemplerne.

Fejlisolering

En WSF kan være nyttig til isolering af fejl. Dets modulære karakter forhindrer, at en scriptreference kan forstyrre en anden. Her er et WSF-eksempel med et modul, der producerer en fejl, og et, der ikke gør:

<?xml version="1.0" ?>
 <job id="Partially works">
   <!-- This will not work -->
   <script language="VBScript">
'    <![CDATA[
         WScript.echo 4/0 ' Oh, boy! You cannot divide by zero...
     ]]>
   </script>
   <!-- This will work... definitely... -->
   <script language="VBScript">
     <![CDATA[
         WScript.echo "Hello, Scripters!" & vbNewline & _
                      "Fantastic! It worked!"
'    ]]>
   </script>
 </job>

Det første scriptmodul producerer en "divide by zero" -fejl. Dette vil typisk få scriptet til at ende i Windows Script Host, men denne modulære metode gør det muligt for scriptet at fortsætte og udføre det andet scriptmodul .

Understøttelse af blandet sprog

En Windows Script-fil understøtter flere sprog, som beskrevet i Windows Script Host- referencen. En af funktionerne i dette filformat er, at du muligvis bruger mere end et på én gang. Dette betyder, at du kan have et scriptingsprog til at bruge kode fra et andet scriptingsprog. Det mest mindeværdige eksempel for langvarige VBScript- brugere er brugen af ​​Microsoft JScript til at betjene en sorteringsanmodning for VBScript, da den ikke har en indbygget sorteringsfunktion til en række værdier. VBScript- brugere skriver muligvis deres egen sorteringsmetode eller låner en fra et eksisterende objekt som en ADO ( ActiveX Data Objects ) Recordset eller en .NET ( .NET Framework ) ArrayList , men den hurtigste måde at sortere en matrix er at bruge metoden indbygget i JScript . Her er et grundlæggende eksempel på, hvordan det fungerer:

<?xml version="1.0" ?>
<!-- Mixing JScript and VBScript -->
 <job id="SORT-VBScriptWithJScript">
   <script language="JScript">
     function SortVBArray(arrVBArray) {return arrVBArray.toArray().sort();}
   </script>
   <script language="VBScript">
'    <![CDATA[
     '** Fastest sort: call the Jscript sort from VBScript
     myData = "a,b,c,1,2,3,X,Y,Z,p,d,q"
     wscript.echo "Original List of values: " & vbTab & myData
     starttime = timer()
     sortedArray = SortVBArray(split(myData,","))
     endtime=timer()
     jscriptTime = round(endtime-starttime,2)
     wscript.echo "JScript sorted in " & jscriptTime & " seconds: "  & vbTab & sortedArray
'    ]]>
   </script>
 </job>

Outputet ser sådan ud, sorteret efter ASCII -kodesekvens:

Original List of values:        a,b,c,1,2,3,X,Y,Z,p,d,q
JScript sorted in 0 seconds:    1,2,3,X,Y,Z,a,b,c,d,p,q

Udsættelse af konstanter

En anden meget nyttig funktion ved en WSF er, at XML-indpakningen kan være bundet til en objektreference eller -kontrol, så du kan bruge objektets konstanter i stedet for at skulle erklære dem. I almindelige VBScript- og JScript- filer vil du blive tvunget til at erklære en konstant værdi (uden for dem, der er interne i Windows Script Host ) for at bruge konstanten. Et eksempel på dette er vist nedenfor:

const adLockBatchOptimistic = 4
MsgBox "The value of ""adLockBatchOptimistic"" is " & _
       adLockBatchOptimistic & ".", vbInformation,"adLockBatchOptimistic"

Hvis din objektdokumentation kun henviser til konstantens navn og ikke til konstantens værdi, ville du ikke have nogen måde at vide værdien uden hjælp fra et integreret udviklingsmiljø til at fortælle dig, hvad de sidestiller med. Ved at bruge WSF-referenceerklæringen kan du bruge konstanterne uden at angive deres værdier. Eksemplet nedenfor opregner værdierne for flere almindelige konstanter i ADO ( ActiveX Data Objects ) Recordset .

<?xml version="1.0" ?>
<!-- WSF Example with Object Reference
Notes for this very formal example:
 CDATA is used to help the XML parser ignore 
 special characters in the content of the script.  
 The CDATA open and close must be masked 
 from VBScript by making them comments.
-->
<package>
 <job id="EnumerateConstantsADO">
  <reference object="ADODB.Recordset" />
  <script language="VBScript">
'  <![CDATA[
    dim title, str, i
    ctecArray = Array("adOpenUnspecified","adOpenForwardOnly", _
                      "adOpenKeyset","adOpenDynamic","adOpenStatic")
    title = "ADO Recordset Values for Constants"
    str = title & vbNewLine & vbNewLine
    str = str & "*CursorTypeEnum Constants*" & vbNewLine
    For i = 0 to ubound(ctecArray)
      str = str & Eval(ctecArray(i)) & vbTab & ctecArray(i) & vbNewLine
    Next
    str = str & vbNewLine
    str = str & "*LockTypeEnum Constants*" & vbNewLine
    ltecArray = Array("adLockUnspecified","adLockReadOnly", _
                      "adLockPessimistic","adLockOptimistic", _
                      "adLockBatchOptimistic")
    For i = 0 to ubound(ltecArray)
      str = str & Eval(ltecArray(i)) & vbTab & ltecArray(i) & vbNewLine
    Next
    MsgBox str, vbInformation, Title
'  ]]>
  </script>
 </job>
</package>

Kørelse af ovenstående script fra en fil med en ".WSF"udvidelse, såsom en navngivet "EnumerateConstantsADO.wsf", giver resultatet vist nedenfor:

ADO Recordset Values for Constants

*CursorTypeEnum Constants*
-1      adOpenUnspecified
0       adOpenForwardOnly
1       adOpenKeyset
2       adOpenDynamic
3       adOpenStatic

*LockTypeEnum Constants*
-1      adLockUnspecified
1       adLockReadOnly
2       adLockPessimistic
3       adLockOptimistic
4       adLockBatchOptimistic

Derudover gør brugen af ​​objektreferencen til at eksponere konstanterne det at skrive scriptet mere som at skrive på et standard programmeringssprog. Faktisk vil indholdet af eksempelskriptet, der er skrevet i VBScript, faktisk samles til et Visual Basic- program og køre på samme måde, så længe dette program bruger den samme henvisning til ADODB.

Se også

eksterne links