echo Usage: build.bat [--relese ^<LOG_FILE^>] [make target ...] :parse-args rem 检测到没有下个参数,跳到编译 if "%1"=="" ( goto pre-build1 ) if "%1"=="--release" ( rem 解析到--release,还需再读一个后面跟的文件地址 set RELEASE_FLAG=1 set SVN_LOG_FILE=%RUN_PATH%\%2 shift ) else ( rem 其他参数都归自定义make参数 set CUSTOM_MAKE_ARGS=%CUSTOM_MAKE_ARGS% %1 ) rem shift更改参数的位置 shift goto parse-args
::==============================Parse Markdown Function============================ rem 定位Markdown中相应标题所在起始行和结束行 :locateMarkdownTitleFunc echo Entering Function %0 echo inFileName %1 rem titleName需加引号 echo titleName %2
set startLineNum= set endLineNum= rem 查找所有#开头的标题行 for /F "tokens=*" %%iin ('findstr /i /n "^#" %1') do ( set "line=%%i" rem 解析标题行的行号和内容 for /F "tokens=1* delims=:" %%jin ("!line!") do ( set linenum=%%j set "linestr=%%k" rem 已有起始行 没有结束行,设置结束行 if "!startLineNum!" neq "" if "!endLineNum!" equ "" ( set endLineNum=!linenum! ) rem 去标题内容首部#和空格 for /F "tokens=* delims=#" %%ain ("!linestr!") doset "linestr=%%a" for /F "tokens=* delims= " %%ain ("!linestr!") doset "linestr=%%a" rem 标题名匹配 没有起始行,设置起始行(多个匹配使用第一个) if /i "!linestr!" equ %2if "!startLineNum!" equ "" ( set startLineNum=!linenum! ) ) ) rem 有起始行没有结束行则取文件总行数+1作为结束行 if "%startLineNum%" neq "" if "!endLineNum!" equ "" ( for /F %%ain ('find /c /v "" ^< %1') doset /a endLineNum=%%a+1 ) echo Leaving Function %0 goto:eof rem 解析README中的Repo Link表格,设环境变量 :parseRepoLinkFunc echoEnteringFunction %0 echoinFileName %1 echoargsSuffix %2 rem 定位Markdown中Repo Link标题所在起始行和结束行 call:locateMarkdownTitleFunc %1 "Repolink" setRepoLinkStartLineNum=%startLineNum% setRepoLinkEndLineNum=%endLineNum% echoRepoLinkStartLineNum=%RepoLinkStartLineNum% echoRepoLinkEndLineNum=%RepoLinkEndLineNum% rem 解析svn配置行 for /F "tokens=1,2,3,4 delims=^| " %%iin ('findstr /i /n "svn.*http" %1') do ( rem 解析行号 for /F "tokens=1* delims=:" %%ain ("%%i") do ( setlinenum=%%a ) rem 行号大于标题开始行 且 小于标题结束行 则解析,设环境变量 if !linenum! gtr %RepoLinkStartLineNum% if !linenum! lss %RepoLinkEndLineNum% ( setSvnUrlMd_%2=%%l ) ) rem 解析git配置行 for /F "tokens=1,2,3,4 delims=^| " %%iin ('findstr /i /n "git.*http" %1') do ( rem 解析行号 for /F "tokens=1* delims=:" %%ain ("%%i") do ( setlinenum=%%a ) rem 行号大于标题开始行 且 小于标题结束行 则解析,设环境变量 if !linenum! gtr %RepoLinkStartLineNum% if !linenum! lss %RepoLinkEndLineNum% ( setGitUrlMd_%2=%%l setBranchMd_%2=%%k ) ) echoLeavingFunction %0 goto:eof rem 解析README中的Config表格,输出到文件 :parseConfigFunc echoEnteringFunction %0 echoinFileName %1 echooutFileName %2 rem 清空outFile del %2 2>nul rem 定位Markdown中Config标题所在起始行和结束行 call:locateMarkdownTitleFunc %1 "Config" setConfigStartLineNum=%startLineNum% setConfigEndLineNum=%endLineNum% echoConfigStartLineNum=%ConfigStartLineNum% echoConfigEndLineNum=%ConfigEndLineNum% rem 查找Config标题中Config Name所在行 for /F "tokens=*" %%iin ('findstr /i /n /c:"ConfigName" %1') do ( for /F "tokens=1* delims=:" %%ain ("%%i") do ( setlinenum=%%a if !linenum! gtr %ConfigStartLineNum% if !linenum! lss %ConfigEndLineNum% ( rem 设置Config Table内容开始行 set /atableStart=!linenum!+2 ) ) ) rem 逐行遍历Markdown文件 for /F "tokens=1,2,3,4 delims=^| " %%iin ('findstr /i /n "^" %1') do ( rem 解析行号 for /F "tokens=1* delims=:" %%ain ("%%i") do ( setlinenum=%%a ) rem 行号大于等于表格内容开始行则解析 if !linenum! geq %tableStart% ( setconfigName=%%j setconfigValue=%%k rem 检测为空判定为表格结束,退出函数 if "!configName!" equ "" ( gotoleaveParseConfig ) if "!configValue!" equ "" ( gotoleaveParseConfig ) rem 存到输出文件 echo !configName!=!configValue!>>%2 echo !configName!=!configValue! rem 是PostSyncJob 则 设环境变量 if "!configName!" equ "PostSyncJob" ( setPostSyncJob=!configValue! ) ) ) :leaveParseConfig echoLeavingFunction %0 goto:eof ::=================================================================================