Windows-Server-2003/tools/postbuildscripts/xmlbf.cmd

119 lines
4.7 KiB
Batchfile

@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION
SETLOCAL ENABLEDELAYEDEXPANSION
SET Display=
SET Glob=
SET Pwd=
SET Verbose=
SET Self=%~nx0
:SwitchLoop
FOR %%. in (./ .- .) do IF ".%1." == "%%.?." GOTO :Help
IF "%1" == "" GOTO :EndSwitchLoop
FOR /f "tokens=1* delims=:" %%a in ('echo %1') do (
SET Switch=%%a
SET Arg=%%b
FOR %%. in (./ .-) do (
IF ".!Switch!." == "%%.g." (SET Glob=!Arg!&&GOTO :ShiftArg)
IF ".!Switch!." == "%%.d." (SET Pwd=!Arg!&&GOTO :ShiftArg)
IF ".!Switch!." == "%%.w." (SET Display=X&&GOTO :ShiftArg)
IF ".!Switch!." == "%%.v." (SET Verbose=X&&GOTO :ShiftArg)
)
GOTO :help
)
:ShiftArg
shift
GOTO :SwitchLoop
:EndSwitchLoop
PUSHD %Pwd%
call :main %Glob% %Pwd% %Display%
SET Display=
popd
ENDLOCAL
GOTO :eof
:main
SET Display=%3
SET Glob=%1
SET Pwd=%~2
FOR %%_ IN (perl.exe) DO IF NOT defined bin/perl SET bin/perl=%%~$PATH:_
SET parser=CSCRIPT
IF NOT "%Display%"== "" (
SET parser=WSCRIPT
)
REM USEFUL FOR identifying files like helpsupportservices.
SET files=
SET broken=
SET dummy=
SET checker=%RAZZLETOOLPATH%\POSTBUILDSCRIPTS\checkXML.js
SET /A testedfiles=0
SET /A brokenfiles=0
SET /A cnt=1
IF NOT defined Glob goto :noglob
FOR /F %%f in ('dir /s/b/a-d "%Glob%"') DO @(
IF EXIST %%f (
IF DEFINED Verbose ECHO add "%%f"
SET files[!cnt!]=%%f
SET /A cnt=!cnt!+1
)
)
goto :checkfiles
:Noglob
SET Glob=*
FOR /F %%f in ('findstr /imsrc:"\<.*\?.*x.*m.*l.* .*v.*e.*r.*s.*i.*o.*n.*=.*" "%Glob%"') DO @(
IF EXIST %%f (
IF DEFINED Verbose ECHO add "%%f"
SET files[!cnt!]=%%f
SET /A cnt=!cnt!+1
)
)
:checkfiles
SET /A testedfiles=!cnt!-1
IF %testedfiles% LEQ 0 echo No files found & goto :eof
ECHO checking %testedfiles% files
SET /A cnt=1
FOR /L %%k in (1 1 %testedfiles%) DO @(
SET xmlfile=!files[%%k]!
IF DEFINED Verbose ECHO Parse "!xmlfile!"
%bin/perl% -e "use strict; use XML::Parser; use CGI qw(:all); new XML::Parser(Style => 'Debug')->parsefile($ARGV[0]);" !xmlfile! 1>NUL 2>NUL
IF NOT !errorlevel!==0 (
IF DEFINED Verbose ECHO suspicious "!xmlfile!"
SET broken[!cnt!]=!xmlfile!
SET /A cnt=!cnt!+1
)
SET files[%%k]=
)
SET /A brokenfiles=!cnt!-1
FOR /L %%k in (1 1 %brokenfiles%) DO @(
SET f=!broken[%%k]!
IF NOT ".!f!."==".." (
FOR %%i in (!f!) DO @(SET d=%%~nxi
SET dummy[%%k]="%temp%\!D!.xml"
)
)
)
FOR /L %%k in (1 1 %brokenfiles%) DO @(
ECHO ============================================================
COPY !broken[%%k]! !dummy[%%k]! 1>NUL
%parser% /NOLOGO %checker% !dummy[%%k]!
set broken[%%k]=
set dummy[%%k]=
)
IF NOT %brokenfiles% GTR 0 (
echo No syntax errors found
GOTO :eof
) ELSE (
echo %brokenfiles% suspicious files detected.
GOTO :eof
)
:help
echo %Self% Validator FOR the XML files before submission.
echo Usage: %Self% -d:^<DIR^> -g:^<GLOB^> -w -v [-?]
echo w use the wscript (default is to use cscript)
echo v be verbose (verbose same as debug).
echo ^<GLOB^> use file name mask (semi obsolete, since
echo %Self% can filter xml files from the rest
GOTO :eof