源战役
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

542 líneas
19 KiB

  1. @echo off
  2. rem ------------------------------
  3. rem huangyongxing@yeah.net
  4. rem ��Ŀ���뼰��ͣ���ƹ���
  5. rem ------------------------------
  6. cd %~dp0/../
  7. set DIR_ERL=%cd%
  8. cd ../
  9. set DIR_MAIN=%cd%
  10. rem ע������SRV_ID��HOST��PORT��
  11. rem һ��HOST���Լ���IP��SRV_ID�Ƽ�ʹ���Լ��Ĺ������֡���֤Ψһ��
  12. rem ͬʱ����Ҫ���·�ָ����Ӧ�汾��erl��װ·��
  13. set SRV_ID=1
  14. set HOST=
  15. set COOKIE=mrzj_%SRV_ID%
  16. set PORT=9110
  17. set NODE_NAME_PREFIX=mrzj_dev_
  18. set NODE_NAME=%NODE_NAME_PREFIX%%SRV_ID%@%HOST%
  19. set CENTER_NODE_NAME=mrzj_dev_center@%HOST%
  20. set CENTER_COOKIE=mrzj_dev_center
  21. set CENTER_PORT=9111
  22. title ����ս��Դ������(%NODE_NAME%, %PORT%)
  23. rem Э�����ɹ���
  24. set PROTO_TOOL=%DIR_MAIN%\doc\proto_auto\ProtoBuilder.exe
  25. if not exist %PROTO_TOOL% set PROTO_TOOL=
  26. rem ָ��erl·�������Զ�������Ӧ��werl��escript·��
  27. rem ʹ��otp 18.3ʾ��
  28. rem set ERL=D:\Program Files\erl7.3\bin\erl.exe
  29. rem ʹ��otp 19.3ʾ��
  30. rem set ERL=D:\Program Files\erl8.3\bin\erl
  31. rem ʹ��otp 23.3ʾ��
  32. set ERL=D:\Program Files\erl-23.3.4.4\bin\erl
  33. rem ʹ�û��������е�erl
  34. rem set ERL=erl
  35. rem ������Ϸ��ʹ�õ�config�������ڱ������ö���������
  36. set GS_CONFIG=gsrv.config
  37. rem �ͻ���·��
  38. set CLIENT=%DIR_MAIN%\code\u3d\app\localTest\ClientApp.exe
  39. if "%HOST%"=="" (
  40. call :fun_error HOST���
  41. goto :EOF
  42. )
  43. rem �ͻ���Ŀ¼
  44. set CLIENT_DIR=%DIR_MAIN%\code
  45. rem ������Ŀ¼
  46. set SERV_DIR=%DIR_ERL%
  47. rem svn����Ŀ¼(��ʵ�ʰ�װĿ¼����)
  48. set SVN_EXE=C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe
  49. rem ���ó�ʼ���ű�ִ�л����Ľӿ�
  50. call :fun_init_calc
  51. rem dialyzer��������
  52. rem plt file
  53. set PLTFILE=%DIR_ERL%\script\.dialyzer_plt_v%OTP_VER%
  54. rem dialyzer ������־�����ļ���ǰ׺
  55. set DIALYZER_OUTFILE_PREFIX=dialyzer_v%OTP_VER%
  56. echo.
  57. rem --------- ��ʼ��ѭ��: �ȴ�ָ��->����ָ��->ִ��ָ��->�ȴ�ָ�� ---------
  58. :fun_main
  59. echo erts version: %ERTS_VER%
  60. echo otp version: %OTP_VER%
  61. echo werl.exe : %WERL%
  62. echo server root : %DIR_ERL%
  63. set inp=
  64. echo ---------------------------------------------------------------------------
  65. echo make^|m ���� ^| dialyzer^|dlz ����dialyzer��̬����
  66. echo mmm ���ٱ���(powershell) ^| mm �������汾�������ļ�
  67. echo start ������Ϸ�������� ^| stop �ر���Ϸ��������
  68. echo restart ���������������� ^| hot �ȸ�������������
  69. echo hot_master �ȸ���Ϸ�� ^| hot_center �ȸ�����
  70. echo master ������Ϸ�� ^| stop_master �ر���Ϸ��
  71. echo center �������������� ^| stop_center �رտ���������
  72. echo werl ����һ��werl���� ^| kill^|k ǿ�н�������werl.exe
  73. echo dir ����serverĿ¼ ^| clean_logs^|cl ����������Ϸ����־
  74. echo client^|c ����PC���ͻ��� ^| attr ��������attr_convģ��
  75. if "%PROTO_TOOL%" NEQ "" echo pt Э�����ɹ��� ^| su ^| cu svn���� ������^|�ͻ���
  76. echo clear^|cls ���� ^| quit^|q �˳�
  77. echo ---------------------------------------------------------------------------
  78. set /p inp=������ָ��:
  79. cd %DIR_ERL%
  80. goto fun_routing
  81. :fun_routing
  82. if "%inp%"=="make" call :fun_make
  83. if "%inp%"=="m" call :fun_make
  84. if "%inp%"=="mm" call :fun_mm
  85. if "%inp%"=="mmm" call :fun_mmm
  86. if "%inp%"=="start" call :fun_start
  87. if "%inp%"=="stop" call :fun_stop
  88. if "%inp%"=="master" call :fun_start_master
  89. if "%inp%"=="stop_master" call :fun_stop_master
  90. if "%inp%"=="hot" call :fun_hot
  91. if "%inp%"=="hot_master" call :fun_hot_master
  92. if "%inp%"=="hot_center" call :fun_hot_center
  93. if "%inp%"=="restart" call :fun_restart
  94. if "%inp%"=="center" call :fun_start_center
  95. if "%inp%"=="stop_center" call :fun_stop_center
  96. if "%inp%"=="kill" call :fun_kill
  97. if "%inp%"=="k" call :fun_kill
  98. if "%inp%"=="clean_logs" call :fun_clean_logs
  99. if "%inp%"=="cl" call :fun_clean_logs
  100. if "%inp%"=="werl" call :fun_start_werl
  101. if "%inp%"=="client" call :fun_start_client
  102. if "%inp%"=="c" call :fun_start_client
  103. if "%inp%"=="pt" call :fun_proto_tool
  104. if "%inp%"=="attr" call :fun_create_attr_conv
  105. if "%inp%"=="dir" call :fun_dir_server
  106. if "%inp%"=="su" call :server_svn_update
  107. if "%inp%"=="cu" call :client_svn_update
  108. if "%inp%"=="dlz" call :fun_run_dialyzer
  109. if "%inp%"=="dialyzer" call :fun_run_dialyzer
  110. if "%inp%"=="cls" cls
  111. if "%inp%"=="clear" cls
  112. if "%inp%"=="quit" goto :EOF
  113. if "%inp%"=="q" goto :EOF
  114. echo.
  115. goto fun_main
  116. rem --------- ����Ϊ����ָ�������ӿڷ�װ ---------
  117. rem ��ʼ�������ű�һЩ����·��������һЩȫ�ֱ���
  118. rem �������±���ֵ��
  119. rem ERL��WERL��ESCRIPT��ERTS_VER��ERTS_VER_MAIN
  120. rem ERL_OPT_NORMAL
  121. rem ERL_OPT_S_SINGLE
  122. :fun_init_calc
  123. rem ����%erl%����erl˵�������û���������������escriptҲ�ҵõ�
  124. if "%ERL%"=="erl" set envTrue=1
  125. if "%ERL%"=="erl.exe" set envTrue=1
  126. setlocal enabledelayedexpansion
  127. if "!envTrue!"=="1" (
  128. for /f "delims=" %%i in ('where erl') do (set ERL=%%i)
  129. )
  130. rem ���ļ����Ϻ�׺�������ж��Ƿ�����
  131. if "!ERL:~-4!" NEQ ".exe" set ERL=!ERL!.exe
  132. if NOT EXIST !ERL! (
  133. echo "�������"!ERL!
  134. goto :EOF
  135. ) ELSE (
  136. set ERL_BIN_ROOT=!ERL:erl.exe=!
  137. set ESCRIPT=!ERL_BIN_ROOT!escript.exe
  138. set WERL=!ERL_BIN_ROOT!werl.exe
  139. set DIALYZER=!ERL_BIN_ROOT!dialyzer.exe
  140. rem �����Զ�������·����'\'����д�Ŀ�����'/'���������඼�ȳ���ȥ��
  141. set ERL_INST_TMP=!ERL_BIN_ROOT:bin\=!
  142. set ERL_INST=!ERL_INST_TMP:bin/=!
  143. )
  144. rem ȡ��erts version
  145. call :fun_calc_erts_ver ERTS_VER ERTS_VER_MAIN "!ERL!"
  146. rem call :fun_calc_otp_ver OTP_VER "!ERL!" "!ERL_INST!"
  147. call :fun_calc_otp_ver_simple OTP_VER "!ERL_INST!"
  148. endlocal & (
  149. rem ��������Ϊȫ�ֱ�������Ҫ������set���������Ǿֲ�������
  150. rem set ERL_BIN_ROOT=%ERL_BIN_ROOT%
  151. set ERL=%ERL%
  152. set WERL=%WERL%
  153. set ESCRIPT=%ESCRIPT%
  154. set DIALYZER=%DIALYZER%
  155. set ERTS_VER=%ERTS_VER%
  156. set ERTS_VER_MAIN=%ERTS_VER_MAIN%
  157. set OTP_VER=%OTP_VER%
  158. set ERL_INST=%ERL_INST%
  159. rem echo erlang root: %ERL_BIN_ROOT%
  160. echo erl.exe : %ERL%
  161. echo werl.exe : %WERL%
  162. echo escript.exe : %ESCRIPT%
  163. rem ����һЩִ�в���
  164. if %ERTS_VER_MAIN% LEQ 8 (
  165. set ERL_OPT_NORMAL=+P 204800 +K true +A 100 +spp true -smp enable -hidden +sbwt none
  166. set ERL_OPT_S_SINGLE=+P 204800 +K true +A 100 +spp true -smp disable -hidden +sbwt none
  167. ) ELSE (
  168. set ERL_OPT_NORMAL=+P 204800 +K true +A 100 +spp true +S 0 -hidden +sbwt none
  169. set ERL_OPT_S_SINGLE=+P 204800 +K true +A 100 +spp true +S 1 -hidden +sbwt none
  170. )
  171. ) & goto :EOF
  172. :fun_make
  173. cd %DIR_ERL%
  174. set startTime=%time%
  175. call :get_localtime startTimeStr
  176. echo [%startTimeStr%] start make
  177. echo.
  178. rem xcopy /d ֻ���±�Ŀ���µ�Դ�ļ�
  179. xcopy "dep\ebin\*.beam" "ebin\" /h /r /k /q /y /d
  180. rem �жϱ���������������ʵʹ�õ��ļ���Ŀǰwindows�涼ʹ��release�棬��Ҫ�����汾���ֹ������ļ���
  181. setlocal enabledelayedexpansion
  182. set needCopy=FALSE
  183. if NOT EXIST "ebin\game_logger.beam" (
  184. SET needCopy=TRUE
  185. ) ELSE (
  186. rem SET fileCmpRet=
  187. rem FOR /F %%i IN ('comp /M dep\ebin\debug\game_logger.beam ebin\game_logger.beam') DO set fileCmpRet=%%i
  188. rem if "!fileCmpRet!"=="�ļ��Ĵ�С��ͬ��" SET needCopy=TRUE
  189. call :calc_md5 "dep\ebin\release\game_logger.beam" "fMD51"
  190. call :calc_md5 "ebin\game_logger.beam" "fMD52"
  191. if "!fMD51!" NEQ "!fMD52!" SET needCopy=TRUE
  192. )
  193. if "!needCopy!"=="TRUE" xcopy "dep\ebin\release\*.beam" "ebin\" /e /h /r /k /q /y
  194. endlocal
  195. rem �ڱ��롢�ȸ��ȼ򵥲����п�ֱ��ʹ��halt(0)ֱ���˳�erlangVM����c:q()������ֹ�������ٶȸ���
  196. rem set makeOptions=[{d, 'DEV_SERVER'}],
  197. rem ͨ�������ӵ�ѡ�� {d,'DEV_SERVER'}, {d,'CP_VER',"TW"}, ...
  198. set makeOptions=[]
  199. "%ERL%" -noinput -pa ./ebin -eval "mmake:all(2, %makeOptions%),halt(0)"
  200. call :calc_time_diff "%startTime%" "%time%" "runTime"
  201. call :get_localtime EndTimeStr
  202. echo.
  203. echo cost time: %runTime%
  204. echo.
  205. echo [%EndTimeStr%] finish make
  206. echo "%EndTimeStr%" > %DIR_ERL%/script/timefile
  207. goto :EOF
  208. :fun_mm
  209. cd %DIR_ERL%
  210. set startTime=%time%
  211. call :get_localtime startTimeStr
  212. echo [%startTimeStr%] start mm
  213. echo.
  214. svn status "./src" > "./svn_status.log"
  215. cd %DIR_ERL%
  216. "%ERL%" -noinput -pa ./ebin -eval "make_file:make_file(),halt(0)"
  217. call :calc_time_diff "%startTime%" "%time%" "runTime"
  218. call :get_localtime EndTimeStr
  219. echo.
  220. echo cost time: %runTime%
  221. echo.
  222. echo [%EndTimeStr%] finish make
  223. goto :EOF
  224. :fun_start
  225. call :fun_start_center & call :fun_start_master
  226. goto :EOF
  227. :fun_stop
  228. call :fun_stop_master & call :fun_stop_center
  229. goto :EOF
  230. :fun_mmm
  231. cd %DIR_ERL%
  232. set startTime=%time%
  233. call :get_localtime startTimeStr
  234. echo [%startTimeStr%] start mmm
  235. echo.
  236. cd script
  237. echo %cd%
  238. PowerShell.exe -file mm.ps1
  239. call :calc_time_diff "%startTime%" "%time%" "runTime"
  240. call :get_localtime EndTimeStr
  241. echo.
  242. echo cost time: %runTime%
  243. echo.
  244. echo [%EndTimeStr%] finish make
  245. goto :EOF
  246. :fun_start_master
  247. cd %DIR_ERL%\config
  248. rem start cmd /C ""%ERL%" %ERL_OPT_NORMAL% -name %NODE_NAME% -setcookie %COOKIE% -boot start_sasl -config %GS_CONFIG% -pa ../ebin -s main start -extra %HOST% %PORT% & pause"
  249. start "" "%WERL%" %ERL_OPT_NORMAL% -name %NODE_NAME% -setcookie %COOKIE% -boot start_sasl -config %GS_CONFIG% -pa ../ebin -s main start -extra %HOST% %PORT%
  250. goto :EOF
  251. :fun_stop_master
  252. cd %DIR_ERL%\config
  253. set STOP_NODE_NAME=%NODE_NAME_PREFIX%%SRV_ID%_stop_%RANDOM%@%HOST%
  254. "%ERL%" -hidden -name %STOP_NODE_NAME% -setcookie %COOKIE% -pa ../ebin -s main stop_server -extra %NODE_NAME%
  255. rem start "" "%WERL%" -hidden -name %STOP_NODE_NAME% -setcookie %COOKIE% -pa ../ebin -s main stop_server -extra %NODE_NAME%
  256. goto :EOF
  257. :fun_hot
  258. call :fun_hot_master & call :fun_hot_center
  259. goto :EOF
  260. :fun_hot_master
  261. cd %DIR_ERL%\config
  262. set hotNodeName=%NODE_NAME_PREFIX%%SRV_ID%_hot_%RANDOM%@%HOST%
  263. "%ERL%" -hidden -name %hotNodeName% -setcookie %COOKIE% -pa ../ebin -eval "rpc:call('%NODE_NAME%', u, u, []), halt(0)"
  264. rem start "" "%WERL%" -hidden -name %hotNodeName% -setcookie %COOKIE% -pa ../ebin -eval "rpc:call('%NODE_NAME%', u, u, []), halt(0)"
  265. goto :EOF
  266. :fun_hot_center
  267. cd %DIR_ERL%\config
  268. set hotNodeName=%NODE_NAME_PREFIX%center_hot_%RANDOM%@%HOST%
  269. "%ERL%" -hidden -name %hotNodeName% -setcookie %CENTER_COOKIE% -pa ../ebin -eval "rpc:call('%CENTER_NODE_NAME%', u, u, []), halt(0)"
  270. rem start "" "%WERL%" -hidden -name %hotNodeName% -setcookie %CENTER_COOKIE% -pa ../ebin -eval "rpc:call('%CENTER_NODE_NAME%', u, u, []), halt(0)"
  271. goto :EOF
  272. :fun_restart
  273. call :fun_stop
  274. choice /t 2 /d y /n >nul
  275. call :fun_start
  276. goto :EOF
  277. :fun_start_center
  278. cd %DIR_ERL%\config
  279. rem start cmd /C ""%ERL%" %ERL_OPT_NORMAL% -name %CENTER_NODE_NAME% -setcookie %CENTER_COOKIE% -boot start_sasl -config cls.config -pa ../ebin -s main start -extra %HOST% %CENTER_PORT% & pause"
  280. start "" "%WERL%" %ERL_OPT_NORMAL% -name %CENTER_NODE_NAME% -setcookie %CENTER_COOKIE% -boot start_sasl -config cls.config -pa ../ebin -s main start -extra %HOST% %CENTER_PORT%
  281. goto :EOF
  282. :fun_stop_center
  283. cd %DIR_ERL%\config
  284. set STOP_NODE_NAME=center_stop_%RANDOM%@%HOST%
  285. "%ERL%" -hidden -name %STOP_NODE_NAME% -setcookie %CENTER_COOKIE% -pa ../ebin -s main stop_server -extra %CENTER_NODE_NAME%
  286. rem start "" "%WERL%" -hidden -name %STOP_NODE_NAME% -setcookie %CENTER_COOKIE% -pa ../ebin -s main stop_server -extra %CENTER_NODE_NAME%
  287. goto :EOF
  288. rem ǿ�ƹر�werl���̣����쳣�����������£�windows�л�����werl���̣�
  289. :fun_kill
  290. taskkill /F /IM werl.exe
  291. goto :EOF
  292. rem ����������Ϸ����־
  293. :fun_clean_logs
  294. cd %DIR_ERL%\logs
  295. DEL /Q *.*
  296. goto :EOF
  297. rem �����ڵ�����werl
  298. :fun_start_werl
  299. cd %DIR_ERL%\config
  300. if %time:~0,2% leq 9 (set hour=0%time:~1,1%) else (set hour=%time:~0,2%)
  301. set randomNode=werl_%hour%%time:~3,2%%time:~6,2%_%RANDOM%@%HOST%
  302. if not exist gsrv.config (
  303. start "" "%WERL%" -hidden -name %randomNode% -setcookie %COOKIE% -pa ../ebin
  304. ) else (
  305. start "" "%WERL%" -hidden -name %randomNode% -setcookie %COOKIE% -pa ../ebin -config gsrv.config
  306. )
  307. goto :EOF
  308. rem dialyzer��̬�������� ��ʼ���־ò�ѯ���ļ�plt file
  309. :fun_init_plt
  310. echo [init] build plt file
  311. "%DIALYZER%" --build_plt --apps erts kernel stdlib sasl compiler mnesia crypto inets ssl public_key eunit tools --output_plt "%PLTFILE%"
  312. goto :EOF
  313. rem dialyzer��̬�������� ִ�з���
  314. :fun_analyse_code
  315. call :get_datetime_str dt
  316. set outfile=%DIR_ERL%\script\%DIALYZER_OUTFILE_PREFIX%_%dt%.txt
  317. set erlLib=%ERL_INST%\lib
  318. set serverDir=%DIR_ERL%
  319. echo ����ִ��dialyzer����
  320. echo ����������־�ļ���%outfile%
  321. rem "D:/Program Files/erl-23.2.5/bin/dialyzer.exe" -I server/include --src server/src -r server/src -pa "D:/Program Files/erl-23.2.5/lib" --plt ./.dialyzer_plt_mrzj > dialyzer_%dt%.txt
  322. "%DIALYZER%" -I %serverDir%\include --src %serverDir%\src -r %serverDir%\src -pa "%erlLib%" --plt "%PLTFILE%" > "%outfile%"
  323. goto :EOF
  324. rem dialyzer��̬�������ߵ���
  325. :fun_run_dialyzer
  326. if NOT EXIST "%PLTFILE%" call :fun_init_plt
  327. call :fun_analyse_code
  328. goto :EOF
  329. rem Э�����ɹ���
  330. :fun_proto_tool
  331. rem ��Ҫ���������ӳ٣�����else���ſ��״�ִ��ʱ��������������
  332. setlocal enabledelayedexpansion
  333. if "!PROTO_TOOL!"=="" (
  334. call :fun_error δ����Э�����ɹ���
  335. ) else (
  336. for /f "delims=" %%t in ('echo !PROTO_TOOL!') do (set dirProtoTool=%%~dpt)
  337. echo ---------------------------------
  338. echo change to directory: [!dirProtoTool!]
  339. cd !dirProtoTool!
  340. "!PROTO_TOOL!"
  341. )
  342. endlocal
  343. goto :EOF
  344. rem �����ͻ���
  345. :fun_start_client
  346. if NOT EXIST %CLIENT% (
  347. call :fun_error û���ҵ��ͻ��˿�ִ���ļ�[%CLIENT%]
  348. goto :EOF
  349. )
  350. setlocal enabledelayedexpansion
  351. for /f "delims=" %%t in ('echo !CLIENT!') do (set dirClient=%%~dpt)
  352. rem �ͻ��˴�ij���汾��ʼ���ƺ����˾���·����������Դ��������exe����Ŀ¼��������
  353. cd /d "!dirClient!"
  354. start "" cmd /C "%CLIENT%"
  355. endlocal
  356. goto :EOF
  357. rem ����attr_conv�
  358. :fun_create_attr_conv
  359. if NOT EXIST src\tool\attr_tool.erl (
  360. echo "δ�ҵ�attr_tool.erl�ļ�"
  361. ) ELSE (
  362. "%ESCRIPT%" src\tool\attr_tool.erl
  363. )
  364. goto :EOF
  365. rem �򿪷����˹���Ŀ¼ %DIR_ERL%
  366. :fun_dir_server
  367. start "" explorer "%DIR_ERL%"
  368. goto :EOF
  369. rem �����˸���
  370. :server_svn_update
  371. start "" "%SVN_EXE%" /command:update /path:"%SERV_DIR%" /closeonend:0
  372. goto :EOF
  373. rem �ͻ��˸���
  374. :client_svn_update
  375. start "" "%SVN_EXE%" /command:update /path:"%CLIENT_DIR%" /closeonend:0
  376. goto :EOF
  377. rem node name split
  378. rem call :node_name_split "%node%" "nodePrefix" "nodeHost"
  379. :node_name_split
  380. set input=%~1
  381. set sep=@
  382. set nPre=
  383. set nHost=
  384. setlocal enabledelayedexpansion
  385. for /F "delims=%sep% tokens=1-2" %%a in ("%input%") do (
  386. set nPre=%%a
  387. set nHost=%%b
  388. )
  389. endlocal & set "%~2=%nPre%" & set "%~3=%nHost%" & goto :EOF
  390. rem ��������ʱ����ֵ
  391. rem ����ʾ��:
  392. rem set startTime=%time%
  393. rem echo do something
  394. rem call :calc_time_diff "%startTime%" "%time%" "runTime"
  395. rem echo cost time %runTime%
  396. :calc_time_diff
  397. setlocal
  398. set /a n=0
  399. for /f "tokens=1-8 delims=.: " %%a in ("%~1:%~2") do (
  400. set /a n-=1%%a*3600000+1%%b*60000+1%%c*1000+1%%d*10
  401. set /a n+=1%%e*3600000+1%%f*60000+1%%g*1000+1%%h*10
  402. )
  403. set /a s=n/3600000,n=n%%3600000,f=n/60000,n=n%%60000,m=n/1000,n=n%%1000
  404. set "ok=%s% Сʱ %f% ���� %m% �� %n% ����"
  405. endlocal & set "%~3=%ok%" & goto :EOF
  406. rem ��ȡ����ʱ��
  407. :get_localtime
  408. setlocal
  409. if %time:~0,2% leq 9 (set hour=0%time:~1,1%) else (set hour=%time:~0,2%)
  410. set lt=%date:~0,4%-%date:~5,2%-%date:~8,2% %hour%:%time:~3,2%:%time:~6,2%
  411. endlocal & set "%~1=%lt%" & goto :EOF
  412. rem ��ȡ����
  413. rem call :get_datetime_str var
  414. :get_datetime_str
  415. setlocal
  416. if %time:~0,2% leq 9 (set hour=0%time:~1,1%) else (set hour=%time:~0,2%)
  417. set dt=%date:~0,4%%date:~5,2%%date:~8,2%_%hour%%time:~3,2%%time:~6,2%
  418. endlocal & set "%~1=%dt%" & goto :EOF
  419. rem �����ļ�md5
  420. rem call :calc_md5 "filePath" "fMD5"
  421. rem echo %fMD5%
  422. :calc_md5
  423. setlocal
  424. FOR /F %%i IN ('certutil -hashfile "%~1" MD5 ^| findstr /V ��ϣ ^| findstr /V ����') DO set fMD5=%%i
  425. endlocal & set "%~2=%fMD5%" & goto :EOF
  426. rem ����erts�汾
  427. rem call :fun_calc_erts_ver "ERTS_VER" "ERTS_VER_MAIN" "%ERL%"
  428. :fun_calc_erts_ver
  429. rem ע�⣬pattern�����汾���пո���Ҫ������bat�﷨���⣬�����������ֻ������⣩
  430. rem ����Ϊ��ֹ��С�ĸ�ʽ������ʱȥ���˿ո���
  431. rem ���Ը�Ϊ�޿ո񣬲����滻�󣬶�����һ���滻�ո�����
  432. set pattern=Erlang (SMP,ASYNC_THREADS) (BEAM) emulator version
  433. set replace=
  434. set erlbin=%3
  435. setlocal enabledelayedexpansion
  436. for /f "usebackq delims=" %%i in (`"%erlbin%" +V 2^>^&1`) do (set allstr=%%i)
  437. set "ertsVer=!allstr:%pattern%=%replace%!"
  438. set "ertsVer=!ertsVer: =!"
  439. for /f "usebackq delims=." %%i in (`echo !ertsVer!`) do (
  440. if defined ertsVerMain goto break_calc_erts_ver
  441. set ertsVerMain=%%i
  442. )
  443. :break_calc_erts_ver
  444. endlocal & set "%~1=%ertsVer%" & set "%~2=%ertsVerMain%" & goto :EOF
  445. rem ����otp version������erl��ȡ���汾�ţ��ٶ�λ�汾���ļ���
  446. rem call :fun_calc_otp_ver OTP_VER "%ERL%" "%ERL_INST%"
  447. :fun_calc_otp_ver
  448. rem erlang:system_info(otp_release) ��OTP 17֮����ֻ�ܻ�ȡ���汾��
  449. rem Win��Linuxͨ�еķ�����ͨ�� os:find_executable("erl") �ҵ�erl.exe��
  450. rem Ȼ����ȡ�����ļ� ../../release/MainOTPVerion/OTP_VERSION
  451. rem ��Win�Ͽ��Լ���Ϊ��װ·���µ� releases/MainOTPVerion/OTP_VERSION
  452. set erlbin=%2
  453. set erlInst=%3
  454. setlocal enabledelayedexpansion
  455. for /f "usebackq delims=" %%i in (`"%erlbin% -noshell -eval ""io:fwrite(""""^~s"""",[erlang:system_info(otp_release)]),halt(0)"""`) do (
  456. set otpMainVer=%%i
  457. )
  458. set releaseFile=%erlInst%\releases\%otpMainVer%\OTP_VERSION
  459. for /f "usebackq delims=" %%i in (`type %releaseFile%`) do (
  460. set otpVer=%%i
  461. )
  462. endlocal & set "%~1=%otpVer%" & goto :EOF
  463. rem ����otp version��������erl��ȡ���汾�ţ������ļ�ϵͳ�½���һ���汾��Ŀ¼����λ�ļ���
  464. :fun_calc_otp_ver_simple OTP_VER "%ERL_INST%"
  465. set erlInst=%2
  466. set releaseDir=%erlInst%\releases
  467. setlocal enabledelayedexpansion
  468. cd /d %releaseDir%
  469. for /f "usebackq delims=" %%i in (`dir /AD /B`) do (
  470. set releaseFile=%releaseDir%\%%i\OTP_VERSION
  471. )
  472. for /f "usebackq delims=" %%i in (`type %releaseFile%`) do (
  473. set otpVer=%%i
  474. )
  475. endlocal & set "%~1=%otpVer%" & goto :EOF
  476. :fun_error
  477. echo ---------------------
  478. if "%1"=="" (
  479. echo ������!
  480. ) ELSE (
  481. echo %1
  482. )
  483. echo ---------------------
  484. echo.
  485. pause
  486. goto :EOF