📄 mkver.bat
字号:
goto VER_GET_CSET :VER_FROM_M4 REM Get version from version.m4 file, which contains a line reading e.g. REM m4_define([VERSION_NUMBER],[4.2.0b-rc1]) FOR /F "TOKENS=4 DELIMS==[] " %%a IN ('findstr "VERSION_NUMBER" ..\..\..\version.m4') DO @SET VER=%%a echo --- %VER% ---:VER_GET_CSET REM Now we have the version info, try to add a BK ChangeSet version number REM ** Check if BK is installed ... bk -R prs -hr+ -nd:I: ChangeSet 2> NUL > NUL IF ERRORLEVEL 1 GOTO NOBK REM ** Try to get the CSet rev directly from BK FOR /F "TOKENS=1 DELIMS==" %%a IN ('bk.exe -R prs -hr+ -nd:I: ChangeSet') DO @SET CSET=%%a:NOBK REM ** If that was not successful, we'll take a look into a version file, if available IF EXIST ..\..\..\version ( IF "%CSET%"=="" FOR /F "TOKENS=1" %%a IN ('type ..\..\..\version') DO @SET CSET=%%a ) REM ** Now, expand our version number with the CSet revision, if we managed to get one IF NOT "%CSET%"=="" SET VER=%VER%@%CSET% REM We can add a "crypto" identifier (-o) if we see that Crypto support is included in our build IF NOT EXIST ..\include\config.h goto ERRNOCONF FOR /F "TOKENS=1-3 " %%a IN ('findstr /R "^#define\ OPENSSL" ..\include\config.h') DO @SET SSL=%%c IF "%SSL%"=="1" SET VER=%VER%-oREM *****************************************************************************************************************REM Check for user settings regarding the time and date format, we use the registry to find out...REM ***************************************************************************************************************** REM Any temporary files left from a previous run? Go where you belong... IF exist userset.reg del userset.reg IF exist userset.txt del userset.txt regedit /E userset.reg "HKEY_CURRENT_USER\Control Panel\International" IF not exist userset.reg goto ERRNOREG rem *** convert from unicode to ascii if necessary type userset.reg > userset.txt FOR /F "TOKENS=1-9 DELIMS== " %%a IN ('findstr "iDate" userset.txt') DO SET DATEFORMAT=%%b FOR /F "TOKENS=1-9 DELIMS== " %%a IN ('findstr "iTime" userset.txt') DO SET TIMEFORMAT=%%b FOR /F "TOKENS=1-9 DELIMS== " %%a IN ('findstr /R "sDate\>" userset.txt') DO SET DATEDELIM=%%b FOR /F "TOKENS=1-9 DELIMS== " %%a IN ('findstr /R "sTime\>" userset.txt') DO SET TIMEDELIM=%%b IF "%TIMEFORMAT%"=="" GOTO ERRNOTIME IF "%DATEFORMAT%"=="" GOTO ERRNODATE IF "%TIMEDELIM%"=="" GOTO ERRNOTIME IF "%DATEDELIM%"=="" GOTO ERRNODATE SET TIMEDELIM=%TIMEDELIM:~1,1% SET DATEDELIM=%DATEDELIM:~1,1% SET TIMEFORMAT=%TIMEFORMAT:~1,1% SET DATEFORMAT=%DATEFORMAT:~1,1% REM *****************************************************************************************************************REM Well, well. Its time to look at the time and format it in a standard way (if possible)REM ***************************************************************************************************************** FOR /F "TOKENS=1-4 DELIMS=%TIMEDELIM% " %%a IN ('echo %MYTIME%') DO SET AA=%%a&SET BB=%%b&SET CC=%%c&SET DD=%%d REM 12H Format IF "%TIMEFORMAT%" == "0" ( SET HOUR=%AA% SET MIN=%BB% FOR /F "USEBACKQ TOKENS=1 DELIMS=ap" %%a IN ('%BB%') DO SET MMIN=%%a SET SEC=%CC% SET SUBSEC=%DD% ) REM Get rid of the "a" or "p" if we have one of these in our minute string IF NOT "%MMIN%"=="%MIN%" FOR /F "USEBACKQ TOKENS=1 DELIMS=ap " %%a IN ('%MIN%') DO SET MIN=%%a REM 24H Format IF "%TIMEFORMAT%" == "1" ( SET HOUR=%AA% SET MIN=%BB% SET SEC=%CC% SET SUBSEC=%DD% ) IF "%HOUR%"=="" GOTO ERRNOTIME IF "%MIN%"=="" GOTO ERRNOTIME IF "%SEC%"=="" SET SEC=00 IF "%SUBSEC%"=="" SET SUBSEC=00REM *****************************************************************************************************************REM It's time to format the date :-)REM ***************************************************************************************************************** FOR /F "TOKENS=1-4 DELIMS=./- " %%a IN ('ECHO %MYDATE%') DO SET AA=%%a&SET BB=%%b&SET CC=%%c&SET DD=%%d IF "%DD%" == "" ( REM No Day of Week in Date ( IF "%DATEFORMAT%" == "0" SET DOW=_&SET DAY=%BB%&SET NMM=%AA%&SET YEAR=%CC% ) ( IF "%DATEFORMAT%" == "1" SET DOW=_&SET DAY=%AA%&SET NMM=%BB%&SET YEAR=%CC% ) ( IF "%DATEFORMAT%" == "2" SET DOW=_&SET DAY=%CC%&SET NMM=%BB%&SET YEAR=%AA% ) ) ELSE ( ( IF "%DATEFORMAT%" == "0" SET DOW=%AA%&SET DAY=%CC%&SET NMM=%BB%&SET YEAR=%DD% ) ( IF "%DATEFORMAT%" == "1" SET DOW=%AA%&SET DAY=%BB%&SET NMM=%CC%&SET YEAR=%DD% ) ( IF "%DATEFORMAT%" == "2" SET DOW=%AA%&SET DAY=%DD%&SET NMM=%CC%&SET YEAR=%BB% ) ) REM Something went wrong, we weren't able to get a valid date IF NOT "%YEAR%" == "0" GOTO DATEOK goto ERRNODATE:DATEOK REM Clean up any temporary files we may have created... REM IF exist userset.reg del userset.reg REM IF exist userset.txt del userset.txt IF "%NMM%" == "01" SET MONTH=Jan IF "%NMM%" == "02" SET MONTH=Feb IF "%NMM%" == "03" SET MONTH=Mar IF "%NMM%" == "04" SET MONTH=Apr IF "%NMM%" == "05" SET MONTH=May IF "%NMM%" == "06" SET MONTH=Jun IF "%NMM%" == "07" SET MONTH=Jul IF "%NMM%" == "08" SET MONTH=Aug IF "%NMM%" == "09" SET MONTH=Sep IF "%NMM%" == "10" SET MONTH=Oct IF "%NMM%" == "11" SET MONTH=Nov IF "%NMM%" == "12" SET MONTH=Dec IF NOT {%MONTH%} == {} GOTO DATE_OK REM *** Not US date format! Assume ISO: yyyy-mm-dd FOR /F "TOKENS=1-4 DELIMS=/- " %%a IN ('date/t') DO SET DAY=%%a&SET yyyy=%%b&SET nmm=%%c&SET dd=%%d echo a=%%a b=%%b c=%%c d=%%d IF "%NMM%" == "01" SET MONTH=Jan IF "%NMM%" == "02" SET MONTH=Feb IF "%NMM%" == "03" SET MONTH=Mar IF "%NMM%" == "04" SET MONTH=Apr IF "%NMM%" == "05" SET MONTH=May IF "%NMM%" == "06" SET MONTH=Jun IF "%NMM%" == "07" SET MONTH=Jul IF "%NMM%" == "08" SET MONTH=Aug IF "%NMM%" == "09" SET MONTH=Sep IF "%NMM%" == "10" SET MONTH=Oct IF "%NMM%" == "11" SET MONTH=Nov IF "%NMM%" == "12" SET MONTH=Dec:DATE_OK IF "%SS" == "" SET SS="00"REM *****************************************************************************************************************REM Now create a valid version.c file ...REM ***************************************************************************************************************** ECHO Version %VER% Build %RUN% date %MONTH%/%DAY%/%YEAR% time %HOUR%:%MIN%:%SEC% %UTC% ECHO char * Version = "%GENERATED_PROGRAM% %VER% %MONTH% %DAY% %HOUR%:%MIN%:%SEC% %UTC% %YEAR% (%RUN%)" ; > version.c GOTO EOFREM *****************************************************************************************************************REM Here are the error messages I knowREM *****************************************************************************************************************:ERRNOREG ECHO "Error: Registry could not be read (check if regedit.exe is available and works as expected)" GOTO EOF:ERRNODATE ECHO "Error: Dateformat unknown (check if contents of userset.txt are correctly, especially for iDate and sDate)" GOTO EOF:ERRNOTIME ECHO "Error: Timeformat unknown (check if contents of userset.txt are correctly, especially for iTime and sTime)" GOTO EOF:ERRNOVERF ECHO "Error: Version file not found (searching for ../../../version.m4)" GOTO EOF:ERRNOCONF ECHO "Error: Config.h file not found (searching for ../include/config.h)" GOTO EOFREM *****************************************************************************************************************REM Show'em how to run (me)REM *****************************************************************************************************************:USAGE ECHO Usage: mkver.bat [ -P <Program Name> -H ] ECHO -P Database Name ECHO -H Help on optionsREM *****************************************************************************************************************REM All good things come to an end someday. Time to leaveREM *****************************************************************************************************************:EOFREM *** Cleaning up IF EXIST point.txt DEL point.txtIF EXIST userset.txt DEL userset.txtIF EXIST userset.reg DEL userset.reg
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -