Windows-Server-2003/tools/postbuildscripts/parsesys.wsf

144 lines
4.2 KiB
XML

<?XML version="1.0" ?>
<package>
<comment>
<![CDATA[
VBSCRIPT parse the unattend.temp file to execute a
Perl-like regexp subst pattern
$line=~/\$\{(\w+)\}/$ENV{$1}/g
(see parsesys.pl on BVT machine)
]]>
</comment>
<job error="false" debug="false" logo="false">
<resource id="environment">PROCESS</resource>
<resource id="path">%BOOTTESTDRIVE%\TOOLS</resource>
<resource id="ifile">unattend.temp</resource>
<resource id="ofile">unattend.txt</resource>
<resource id="sample"><![CDATA[ProductID="${P_roductID}"]]></resource>
<resource id="pattern"><![CDATA[\$\{(\w+)\}]]></resource>
<script language="VBScript">
<![CDATA[
Option Explicit
'' One of three Tristate values used to indicate
'' the format of the opened file.
Const TristateFalse = 0 '' Opens the file as ASCII.
Const TristateTrue = - 1 '' Opens the file as Unicode.
Const TristateUseDefault = - 2 '' Opens the file using the system default.
Const QUOTE = """"
Const cDebug = False
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Dim spSample, opRexpVa, opRexpUp, aspEnv, opReplace, spGenPat
Dim opShell, opFileSys, dpEnv, spText, spEnv
Dim spPath, spIName, spOName, siIName, siOName, siPath
Dim spExpdIPath, spExpdOPath, opStearm, opIFile, opOFile
Set opFileSys = CreateObject("Scripting.FilesystemObject")
Set opShell = WScript.CreateObject("WScript.Shell")
Set dpEnv = CreateObject("Scripting.Dictionary")
spPath = GetResource("path")
spIName = GetResource("ifile")
spOName = GetResource("ofile")
siPath = WScript.Arguments.Named("path")
siIName = WScript.Arguments.Named("in")
siOName = WScript.Arguments.Named("out")
If siPath <> "" Then
spPath = siPath
End If
If siIName <> "" Then
spIName = siIName
End If
If siOName <> "" Then
spOName = siOName
End If
For Each spEnv In opShell.Environment(CStr(GetResource("environment")))
aspEnv = Split(spEnv,"=")
If 1 = UBound(aspEnv) Then
dpEnv.add UCase(aspEnv(0)), aspEnv(1)
End If
Next
spGenPat = CStr(GetResource("pattern"))
spExpdIPath = opShell.ExpandEnvironmentStrings(_
spPath & "\" & spIName)
spExpdOPath = opShell.ExpandEnvironmentStrings(_
spPath & "\" & spOName)
spIName = opFileSys.GetFileName(opFileSys.GetAbsolutePathName(spExpdIPath))
spOName = opFileSys.GetFileName(opFileSys.GetAbsolutePathName(spExpdOPath))
Set opIFile = opFileSys.GetFile(spExpdIPath)
Set opOFile = opFileSys.CreateTextFile(spExpdOPath, True)
set opStearm = opIFile.OpenAsTextStream(ForReading, TristateUseDefault)
Do while opStearm.AtEndOfStream <> true
spSample = opStearm.ReadLine
Set opRexpVa = New RegExp
With opRexpVa
.Pattern = spGenPat
.Global = True
.IgnoreCase = True
.MultiLine = True
End With
Do While True = opRexpVa.Test(spSample)
Set opRexpUp = New RegExp
With opRexpUp
.Global = True
.IgnoreCase = True
.Pattern = spGenPat
End with
For Each opReplace in opRexpVa.Execute(spSample)
spEnv = opRexpUp.Replace(opReplace.Value, "$1")
opRexpUp.Pattern = Replace(spGenPat, "(\w+)", spEnv)
If cDebug Then
WSCript.echo "opRexpVa.Pattern=", QUOTE & opRexpVa.Pattern & QUOTE
WScript.echo "opRexpUp.Pattern=", opRexpUp.Pattern
WScript.echo "spSample=", spSample
End if
spSample = opRexpUp.Replace(spSample, dpEnv(UCase(spEnv)))
If cDebug Then
WScript.echo "spSample=", spSample & VBNEWLINE
End If
Next
Set opRexpUp = Nothing
Loop
Set opRexpVa = Nothing
opOFile.Write spSample & VBNEWLINE
Loop
Set opFileSys = Nothing
set opshell = Nothing
Set dpEnv = Nothing
]]>
</script>
</job>
</package>