set-version.bat 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. @echo off
  2. chcp 65001 >nul
  3. setlocal enabledelayedexpansion
  4. :: 切换到脚本所在目录(项目根目录)
  5. cd /d "%~dp0"
  6. echo.
  7. echo +--------------------------------------------+
  8. echo ^| 版本号设置工具 ^|
  9. echo ^| Version Bump Tool ^|
  10. echo +--------------------------------------------+
  11. echo.
  12. :: 获取当前版本号(从 package.json 读取)
  13. for /f "tokens=2 delims=:, " %%a in ('findstr /c:"\"version\"" package.json') do (
  14. set "current_version=%%~a"
  15. goto :got_version
  16. )
  17. :got_version
  18. echo 当前版本: %current_version%
  19. echo.
  20. echo 支持的输入格式:
  21. echo - 具体版本号: 1.0.0, 2.1.3
  22. echo - patch: 补丁版本 +1 (如 0.0.6 -^> 0.0.7)
  23. echo - minor: 次版本 +1 (如 0.0.6 -^> 0.1.0)
  24. echo - major: 主版本 +1 (如 0.0.6 -^> 1.0.0)
  25. echo.
  26. :input_loop
  27. set "version_input="
  28. set /p "version_input=请输入新版本号 (q 退出): "
  29. :: 检查是否退出
  30. if /i "%version_input%"=="q" goto exit_script
  31. if /i "%version_input%"=="quit" goto exit_script
  32. if /i "%version_input%"=="exit" goto exit_script
  33. :: 检查是否为空
  34. if "%version_input%"=="" (
  35. echo [错误] 版本号不能为空,请重新输入
  36. echo.
  37. goto input_loop
  38. )
  39. :: 检查是否为 patch/minor/major
  40. if /i "%version_input%"=="patch" goto validate_version
  41. if /i "%version_input%"=="minor" goto validate_version
  42. if /i "%version_input%"=="major" goto validate_version
  43. :: 验证版本号格式 (x.y.z)
  44. echo %version_input%| findstr /r "^[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$" >nul
  45. if errorlevel 1 (
  46. echo [错误] 无效的版本号格式,请输入 x.y.z 格式或 patch/minor/major
  47. echo.
  48. goto input_loop
  49. )
  50. :validate_version
  51. :: 调用 bump-version.mjs --dry-run 获取计算后的版本号
  52. for /f "delims=" %%i in ('node scripts/bump-version.mjs %version_input% --dry-run 2^>nul') do set "new_version=%%i"
  53. if "%new_version%"=="" (
  54. echo [错误] 无法计算新版本号,请检查输入
  55. echo.
  56. goto input_loop
  57. )
  58. echo.
  59. echo +--------------------------------------------+
  60. echo ^| 版本变更预览 ^|
  61. echo +--------------------------------------------+
  62. echo ^| 当前版本: %current_version%
  63. echo ^| 新版本: %new_version%
  64. echo +--------------------------------------------+
  65. echo.
  66. :confirm_loop
  67. set "confirm="
  68. set /p "confirm=确认更新版本号? (y/n): "
  69. if /i "%confirm%"=="y" goto do_update
  70. if /i "%confirm%"=="yes" goto do_update
  71. if /i "%confirm%"=="n" goto cancel_update
  72. if /i "%confirm%"=="no" goto cancel_update
  73. echo [提示] 请输入 y 或 n
  74. goto confirm_loop
  75. :cancel_update
  76. echo.
  77. echo 已取消,请重新输入版本号
  78. echo.
  79. goto input_loop
  80. :do_update
  81. echo.
  82. echo 正在更新版本号...
  83. echo.
  84. node scripts/bump-version.mjs %version_input%
  85. if errorlevel 1 (
  86. echo.
  87. echo [错误] 版本号更新失败
  88. pause
  89. exit /b 1
  90. )
  91. :: 更新当前版本号变量
  92. set "current_version=%new_version%"
  93. echo.
  94. echo ============================================
  95. echo 版本号已成功更新到 %new_version%
  96. echo ============================================
  97. echo.
  98. :after_update_loop
  99. set "after_choice="
  100. set /p "after_choice=按 Enter 继续修改,输入 q 退出: "
  101. if "%after_choice%"=="" goto input_loop
  102. if /i "%after_choice%"=="q" goto exit_script
  103. if /i "%after_choice%"=="quit" goto exit_script
  104. if /i "%after_choice%"=="exit" goto exit_script
  105. goto input_loop
  106. :exit_script
  107. echo.
  108. echo 再见!
  109. exit /b 0