Windows批处理脚本完整指南:可移植的交互式SpringBoot项目管理

Windows批处理脚本完整指南:可移植的交互式SpringBoot项目管理

一、什么是批处理脚本(Batch Script)

1.1 基本概念

批处理脚本(Batch Script)是Windows系统下的一种脚本语言,文件扩展名为 .bat.cmd。它允许您将一系列命令组织在一起,自动执行重复性任务。

核心优势:

  • ✅ 无需安装额外软件,Windows原生支持
  • ✅ 语法简单,易于学习
  • ✅ 可以直接调用系统命令和程序
  • ✅ 支持变量、条件判断、循环等编程结构
  • ✅ 适合自动化构建、部署等任务
  • 使用相对路径可实现跨项目复用

1.2 为什么选择批处理?

特性 批处理(.bat) PowerShell(.ps1)
执行策略限制 无限制 有安全策略限制
系统兼容性 所有Windows版本 Win7+需要配置
学习曲线 简单 较复杂
运行方式 双击即可 需要权限配置
可移植性 使用相对路径极佳 路径处理复杂

注:

博客:

https://blog.csdn.net/badao_liumang_qizhi

二、批处理脚本基础语法

2.1 基础命令

echo - 输出信息
batch 复制代码
@echo off              REM 关闭命令回显
echo Hello World       REM 输出文本
echo.                  REM 输出空行
REM / :: - 注释
batch 复制代码
REM 这是一行注释
:: 这也是注释(更简洁)
set - 设置变量
batch 复制代码
REM 设置普通变量
set MY_VAR=Hello

REM 使用变量(使用%包围变量名)
echo %MY_VAR%

REM 设置环境变量(当前会话有效)
set JAVA_HOME=D:\SoftWare\jdk\jdk17
set PATH=%JAVA_HOME%\bin;%PATH%

⚠️ 重要:等号两边不能有空格

batch 复制代码
set VAR = value       REM 错误!变量名会包含空格
set VAR=value         REM 正确

2.2 特殊符号

符号 说明 示例
@ 不显示命令本身 @echo off
% 变量引用 %JAVA_HOME%
:: 注释 :: 这是注释
& 连接多条命令 cmd1 & cmd2
&& 成功执行下一条 cmd1 && cmd2
` ` 管道
> 重定向(覆盖) echo hello > file.txt

2.3 路径操作命令

batch 复制代码
cd /d D:\project      REM 切换到D盘目录(/d表示切换盘符)
cd ..                 REM 返回上级目录
%~dp0                 REM 批处理文件所在目录路径(重要!)

三、关键语法详解:实现可移植性的核心

3.1 %~dp0 - 脚本路径获取(核心技能)

什么是 %~dp0
符号 含义 示例
%0 脚本文件本身 D:\project\start.bat
~d 提取驱动器(盘符) D:
~p 提取路径 \project\
~dp0 组合:驱动器+路径 D:\project\
实际效果
batch 复制代码
REM 假设脚本位于:D:\project\start.bat

echo %0        REM 输出: D:\project\start.bat
echo %~d0      REM 输出: D:
echo %~p0      REM 输出: \project\
echo %~dp0     REM 输出: D:\project\
为什么必须使用 %~dp0
方法 说明 问题
%~dp0 脚本所在目录 ✅ 始终正确
. 当前工作目录 ❌ 取决于从哪里运行
%cd% 当前目录变量 ❌ 会变化
绝对路径 硬编码路径 ❌ 不可移植

3.2 正确的目录切换方式

batch 复制代码
REM ✅ 正确做法
set PROJECT_DIR=%~dp0
cd /d %PROJECT_DIR%

REM ❌ 错误做法
cd %~dp0              REM 缺少 /d 参数
set PROJECT_DIR=.     REM 使用当前目录,不稳定

为什么必须用 cd /d

  • /d 参数允许同时切换盘符
  • 如果脚本在D盘,而当前在C盘,没有 /d 会失败

3.3 完整的路径设置模板

batch 复制代码
REM ========================================
REM 配置区域 - 只需修改JDK和Maven路径
REM ========================================
set MVN=D:\SoftWare\Maven\apache-maven-3.6.3\bin\mvn.cmd
set JAVA_HOME=D:\SoftWare\jdk\jdk17
set PATH=%JAVA_HOME%\bin;%PATH%

REM 使用相对路径 - 自动定位项目根目录
set PROJECT_DIR=%~dp0
cd /d %PROJECT_DIR%
REM ========================================

优势:

  • ✅ JDK和Maven路径是个人配置,只需设置一次
  • ✅ 项目路径自动检测,无需修改
  • ✅ 脚本可复制到任何项目根目录使用

四、流程控制语法

4.1 条件判断(if语句)

基本语法
batch 复制代码
if 条件 (
    命令1
    命令2
) else (
    命令3
)
常用条件类型

1. 检查文件是否存在

batch 复制代码
if exist "pom.xml" (
    echo Project file found
) else (
    echo ERROR: pom.xml not found
    exit /b 1
)

if not exist "%JAVA_HOME%\bin\java.exe" (
    echo [ERROR] JDK not found
    pause
    exit /b 1
)

2. 检查命令执行结果

batch 复制代码
call "%MVN%" clean install
if %errorlevel% neq 0 (
    echo Build failed!
    pause
    goto MENU
)
echo Build successful!

3. 字符串比较

batch 复制代码
if "%choice%"=="1" goto BUILD
if "%choice%"=="2" goto START
if /i "%input%"=="yes" (    REM /i 表示忽略大小写
    echo Confirmed
)
比较运算符
运算符 说明 示例
equ 等于 if %a% equ 0
neq 不等于 if %errorlevel% neq 0
lss 小于 if %count% lss 10
leq 小于等于 if %retry% leq 3
gtr 大于 if %lines% gtr 100
geq 大于等于 if %size% geq 1024

4.2 跳转标签(goto语句)

定义标签
batch 复制代码
:MENU
echo This is the menu
跳转到标签
batch 复制代码
goto MENU
完整示例:交互式菜单
batch 复制代码
:MENU
echo 1. Build
echo 2. Start
set /p choice=Enter choice: 

if "%choice%"=="1" goto BUILD
if "%choice%"=="2" goto START
echo Invalid choice!
goto MENU

:BUILD
echo Building...
goto MENU

:START
echo Starting...
goto MENU

4.3 错误码管理

batch 复制代码
REM 执行命令
call "%MVN%" clean install

REM 检查返回码
if %errorlevel% equ 0 (
    echo SUCCESS
) else (
    echo FAILED with code %errorlevel%
    exit /b %errorlevel%
)

常见错误码:

  • 0 - 成功
  • 1 - 一般错误
  • 2 - 文件未找到
  • 3 - 路径未找到

五、用户交互

5.1 获取用户输入

set /p - 读取用户输入
batch 复制代码
set /p VARIABLE=Please enter value: 
echo You entered: %VARIABLE%

实战应用:菜单选择

batch 复制代码
:MENU
echo.
echo 1. Build Project
echo 2. Start Project
echo 3. Exit
echo.

set /p choice=Enter choice (1-3): 

if "%choice%"=="1" goto BUILD
if "%choice%"=="2" goto START
if "%choice%"=="3" goto END
echo Invalid choice!
goto MENU

5.2 pause - 暂停等待

batch 复制代码
echo Press any key to continue...
pause

REM 或者不显示提示消息
pause >nul

六、完整可移植脚本实现

6.1 脚本设计原则

  1. 配置集中化 - 所有路径在顶部配置
  2. 项目路径自动化 - 使用 %~dp0 自动检测
  3. 环境检查前置 - 启动前验证依赖
  4. 错误处理完善 - 每个操作都有反馈
  5. 菜单循环设计 - 操作完成后返回菜单

6.2 完整脚本代码

batch 复制代码
@echo off
chcp 65001 >nul
echo ========================================
echo   Spring AI Project Manager
echo ========================================
echo.

REM ========================================
REM Configuration - Modify these paths
REM ========================================
set MVN=D:\SoftWare\Maven\apache-maven-3.6.3\bin\mvn.cmd
set JAVA_HOME=D:\SoftWare\jdk\jdk17
set PATH=%JAVA_HOME%\bin;%PATH%

REM Use relative path - script location as project root
set PROJECT_DIR=%~dp0
cd /d %PROJECT_DIR%
REM ========================================

echo Maven: %MVN%
echo JDK:   %JAVA_HOME%
echo Project: %PROJECT_DIR%
echo.

REM Check JDK
if not exist "%JAVA_HOME%\bin\java.exe" (
    echo [ERROR] JDK 17 not found: %JAVA_HOME%
    pause
    exit /b 1
)

echo ===== Java Version =====
java -version
echo.

REM Check Maven
if not exist "%MVN%" (
    echo [ERROR] Maven not found: %MVN%
    pause
    exit /b 1
)

REM Check pom.xml
if not exist "pom.xml" (
    echo [ERROR] pom.xml not found in current directory
    echo Please place this script in project root directory
    pause
    exit /b 1
)

echo ===== Maven Version =====
call "%MVN%" -version
echo.

:MENU
echo.
echo ========================================
echo   Please select operation:
echo ========================================
echo 1. Check Environment
echo 2. Build Project (skip tests)
echo 3. Clean and Build
echo 4. Start Project
echo 5. Package Project (JAR)
echo 6. View Dependencies
echo 7. Test API
echo 8. Exit
echo.

set /p choice=Enter choice (1-8): 

if "%choice%"=="1" goto CHECK
if "%choice%"=="2" goto BUILD
if "%choice%"=="3" goto CLEAN_BUILD
if "%choice%"=="4" goto START
if "%choice%"=="5" goto PACKAGE
if "%choice%"=="6" goto DEPS
if "%choice%"=="7" goto TEST
if "%choice%"=="8" goto END
echo Invalid choice, try again
goto MENU

:CHECK
echo.
echo ===== Environment Check =====
echo JDK Path: %JAVA_HOME%
java -version
echo.
echo Maven Path: %MVN%
call "%MVN%" -version
echo.
echo Project: %PROJECT_DIR%
dir pom.xml
echo.
pause
goto MENU

:BUILD
echo.
echo ===== Building Project =====
call "%MVN%" clean install -DskipTests
if %errorlevel% neq 0 (
    echo.
    echo [ERROR] Build FAILED!
    pause
    goto MENU
)
echo.
echo [SUCCESS] Build SUCCESS!
pause
goto MENU

:CLEAN_BUILD
echo.
echo ===== Cleaning Project =====
call "%MVN%" clean
echo.
echo ===== Building Project =====
call "%MVN%" clean install -DskipTests
if %errorlevel% neq 0 (
    echo.
    echo [ERROR] Build FAILED!
    pause
    goto MENU
)
echo.
echo [SUCCESS] Build SUCCESS!
pause
goto MENU

:START
echo.
echo ===== Starting Project =====
echo.
echo Application will start on configured port
echo Check application.yml for port configuration
echo.
echo Press Ctrl+C to stop application
echo ========================================
echo.
call "%MVN%" spring-boot:run
goto MENU

:PACKAGE
echo.
echo ===== Packaging Project =====
call "%MVN%" clean package -DskipTests
if %errorlevel% neq 0 (
    echo.
    echo [ERROR] Package FAILED!
    pause
    goto MENU
)

REM Find JAR file dynamically
echo.
echo [SUCCESS] Package SUCCESS!
echo JAR files in target directory:
dir /b target\*.jar 2>nul
echo.
echo To run: java -jar target\your-artifact-id-version.jar
pause
goto MENU

:DEPS
echo.
echo ===== Maven Dependencies =====
call "%MVN%" dependency:tree
echo.
pause
goto MENU

:TEST
echo.
echo ===== Testing API =====
echo Note: Please ensure project is running first
echo.
echo Testing default endpoint...
curl -s "http://localhost:8080/actuator/health" 2>nul
if errorlevel 1 (
    echo Application not responding or not running
)
echo.
pause
goto MENU

:END
echo.
echo Goodbye!
exit /b 0

七、脚本逐段详细解析

7.1 第一部分:初始化和配置

batch 复制代码
@echo off
chcp 65001 >nul
echo ========================================
echo   Spring AI Project Manager
echo ========================================
echo.

解析:

  • @echo off - 关闭命令回显,使输出更清爽
  • chcp 65001 >nul - 设置UTF-8编码(>nul 不显示切换信息)
  • echo - 显示标题和分隔线
  • echo. - 输出空行

batch 复制代码
REM ========================================
REM Configuration - Modify these paths
REM ========================================
set MVN=D:\SoftWare\Maven\apache-maven-3.6.3\bin\mvn.cmd
set JAVA_HOME=D:\SoftWare\jdk\jdk17
set PATH=%JAVA_HOME%\bin;%PATH%

解析:

  1. 设置Maven路径

    batch 复制代码
    set MVN=D:\SoftWare\Maven\apache-maven-3.6.3\bin\mvn.cmd
    • 指定Maven可执行文件的完整路径
    • 这是个人配置,根据实际安装位置修改
  2. 设置JDK路径

    batch 复制代码
    set JAVA_HOME=D:\SoftWare\jdk\jdk17
    • 指定JDK 17的安装路径
    • Spring Boot 3.x 要求JDK 17+
  3. 更新PATH环境变量

    batch 复制代码
    set PATH=%JAVA_HOME%\bin;%PATH%
    • 将JDK 17的bin目录添加到PATH最前面
    • 确保使用正确的Java版本
    • %PATH% 引用原有PATH内容

batch 复制代码
REM Use relative path - script location as project root
set PROJECT_DIR=%~dp0
cd /d %PROJECT_DIR%

解析:

  1. 获取脚本所在目录

    batch 复制代码
    set PROJECT_DIR=%~dp0
    • %~dp0 - 脚本文件所在的目录路径
    • 自动获取,无需硬编码
    • 这是实现可移植性的关键
  2. 切换到项目目录

    batch 复制代码
    cd /d %PROJECT_DIR%
    • /d - 允许切换盘符
    • 确保后续操作在项目根目录执行
    • 所有相对路径都基于此目录

7.2 第二部分:环境检查

batch 复制代码
echo Maven: %MVN%
echo JDK:   %JAVA_HOME%
echo Project: %PROJECT_DIR%
echo.

解析:

  • 显示将要使用的配置信息
  • 方便调试和确认设置正确

batch 复制代码
REM Check JDK
if not exist "%JAVA_HOME%\bin\java.exe" (
    echo [ERROR] JDK 17 not found: %JAVA_HOME%
    pause
    exit /b 1
)

解析:

  1. 检查Java可执行文件

    batch 复制代码
    if not exist "%JAVA_HOME%\bin\java.exe"
    • if not exist - 检查文件是否不存在
    • 路径加引号防止空格导致问题
  2. 错误处理

    batch 复制代码
    echo [ERROR] JDK 17 not found: %JAVA_HOME%
    pause
    exit /b 1
    • 显示清晰的错误信息
    • pause - 暂停,让用户看到错误
    • exit /b 1 - 退出脚本,返回错误码1

batch 复制代码
echo ===== Java Version =====
java -version
echo.

REM Check Maven
if not exist "%MVN%" (
    echo [ERROR] Maven not found: %MVN%
    pause
    exit /b 1
)

echo ===== Maven Version =====
call "%MVN%" -version
echo.

解析:

  1. 验证Java版本

    • 因为PATH已设置为JDK 17,这里会显示正确版本
  2. 检查Maven存在性

    • 验证Maven路径是否正确
  3. 显示Maven版本

    batch 复制代码
    call "%MVN%" -version
    • call - 调用批处理文件并返回
    • 必须使用 call,否则不返回当前脚本

batch 复制代码
REM Check pom.xml
if not exist "pom.xml" (
    echo [ERROR] pom.xml not found in current directory
    echo Please place this script in project root directory
    pause
    exit /b 1
)

解析:

  • 关键验证:确保脚本在项目根目录
  • 如果找不到 pom.xml,说明放错了位置
  • 提供友好的错误提示

7.3 第三部分:交互菜单

batch 复制代码
:MENU
echo.
echo ========================================
echo   Please select operation:
echo ========================================
echo 1. Check Environment
echo 2. Build Project (skip tests)
echo 3. Clean and Build
echo 4. Start Project
echo 5. Package Project (JAR)
echo 6. View Dependencies
echo 7. Test API
echo 8. Exit
echo.

set /p choice=Enter choice (1-8): 

解析:

  1. :MENU 标签

    • 定义跳转点,用于循环显示菜单
    • 每次操作完成后返回这里
  2. 显示菜单选项

    • 列出所有可用操作(1-8)
    • 使用英文避免编码问题
  3. 获取用户输入

    batch 复制代码
    set /p choice=Enter choice (1-8): 
    • /p - 提示模式,等待用户输入
    • choice= - 存储到choice变量
    • 用户输入后继续执行

7.4 第四部分:条件路由

batch 复制代码
if "%choice%"=="1" goto CHECK
if "%choice%"=="2" goto BUILD
if "%choice%"=="3" goto CLEAN_BUILD
if "%choice%"=="4" goto START
if "%choice%"=="5" goto PACKAGE
if "%choice%"=="6" goto DEPS
if "%choice%"=="7" goto TEST
if "%choice%"=="8" goto END
echo Invalid choice, try again
goto MENU

解析:

  1. 字符串比较

    batch 复制代码
    if "%choice%"=="1" goto CHECK
    • 变量加引号防止空值语法错误
    • 如果choice为空,""=="1" 仍然合法
  2. goto语句

    • 无条件跳转到指定标签
    • 实现菜单选择的功能路由
  3. 无效输入处理

    batch 复制代码
    echo Invalid choice, try again
    goto MENU
    • 如果都不匹配,显示错误并返回菜单

7.5 第五部分:功能实现详解

功能1:检查环境
batch 复制代码
:CHECK
echo.
echo ===== Environment Check =====
echo JDK Path: %JAVA_HOME%
java -version
echo.
echo Maven Path: %MVN%
call "%MVN%" -version
echo.
echo Project: %PROJECT_DIR%
dir pom.xml
echo.
pause
goto MENU

解析:

  • 显示所有环境信息
  • dir pom.xml - 验证项目文件
  • pause - 等待用户查看后按键
  • goto MENU - 返回菜单
功能2:构建项目
batch 复制代码
:BUILD
echo.
echo ===== Building Project =====
call "%MVN%" clean install -DskipTests
if %errorlevel% neq 0 (
    echo.
    echo [ERROR] Build FAILED!
    pause
    goto MENU
)
echo.
echo [SUCCESS] Build SUCCESS!
pause
goto MENU

解析:

  1. 执行Maven构建

    batch 复制代码
    call "%MVN%" clean install -DskipTests
    • clean - 清理target目录
    • install - 编译、测试、打包、安装
    • -DskipTests - 跳过测试(加快速度)
  2. 检查构建结果

    batch 复制代码
    if %errorlevel% neq 0 (
        echo [ERROR] Build FAILED!
        pause
        goto MENU
    )
    • %errorlevel% - 命令返回码
    • neq - 不等于
    • 非0表示失败,显示错误并返回菜单
  3. 成功提示

    • 显示成功消息
    • 暂停让用户看到
    • 返回菜单
功能3:清理并构建
batch 复制代码
:CLEAN_BUILD
echo.
echo ===== Cleaning Project =====
call "%MVN%" clean
echo.
echo ===== Building Project =====
call "%MVN%" clean install -DskipTests
if %errorlevel% neq 0 (
    echo.
    echo [ERROR] Build FAILED!
    pause
    goto MENU
)
echo.
echo [SUCCESS] Build SUCCESS!
pause
goto MENU

解析:

  • 分两步执行:先清理,再构建
  • 每步都有清晰的提示
  • 更详细的执行过程展示
功能4:启动项目
batch 复制代码
:START
echo.
echo ===== Starting Project =====
echo.
echo Application will start on configured port
echo Check application.yml for port configuration
echo.
echo Press Ctrl+C to stop application
echo ========================================
echo.
call "%MVN%" spring-boot:run
goto MENU

解析:

  1. 显示提示信息

    • 说明端口配置在application.yml中
    • 提示如何停止应用
  2. 启动SpringBoot

    batch 复制代码
    call "%MVN%" spring-boot:run
    • spring-boot:run - Maven插件运行应用
    • 这是前台进程,会阻塞
    • 用户按 Ctrl+C 后返回菜单

运行效果:

功能5:打包项目
batch 复制代码
:PACKAGE
echo.
echo ===== Packaging Project =====
call "%MVN%" clean package -DskipTests
if %errorlevel% neq 0 (
    echo.
    echo [ERROR] Package FAILED!
    pause
    goto MENU
)

REM Find JAR file dynamically
echo.
echo [SUCCESS] Package SUCCESS!
echo JAR files in target directory:
dir /b target\*.jar 2>nul
echo.
echo To run: java -jar target\your-artifact-id-version.jar
pause
goto MENU

解析:

  1. 执行打包

    batch 复制代码
    call "%MVN%" clean package -DskipTests
    • package - 打包成JAR(不安装到仓库)
  2. 动态查找JAR文件

    batch 复制代码
    dir /b target\*.jar 2>nul
    • /b - 简洁格式(只显示文件名)
    • *.jar - 匹配所有JAR文件
    • 2>nul - 隐藏错误信息
  3. 显示运行方式

    • 提示如何使用JAR文件
功能6:查看依赖
batch 复制代码
:DEPS
echo.
echo ===== Maven Dependencies =====
call "%MVN%" dependency:tree
echo.
pause
goto MENU

解析:

  • dependency:tree - 显示依赖树
  • 帮助排查依赖冲突
功能7:测试API
batch 复制代码
:TEST
echo.
echo ===== Testing API =====
echo Note: Please ensure project is running first
echo.
echo Testing default endpoint...
curl -s "http://localhost:8080/actuator/health" 2>nul
if errorlevel 1 (
    echo Application not responding or not running
)
echo.
pause
goto MENU

解析:

  • curl -s - 静默模式发送请求
  • 2>nul - 隐藏错误输出
  • if errorlevel 1 - 检查请求是否失败
功能8:退出
batch 复制代码
:END
echo.
echo Goodbye!
exit /b 0

解析:

  • exit /b 0 - 退出脚本
  • /b - 只退出批处理,不关闭窗口
  • 0 - 返回码表示成功

八、关键技术点总结

8.1 可移植性实现

batch 复制代码
REM 核心代码
set PROJECT_DIR=%~dp0
cd /d %PROJECT_DIR%

为什么能实现可移植?

  1. %~dp0 自动获取脚本位置
  2. 不依赖任何硬编码路径
  3. 适配任何项目根目录
  4. 复制即用,无需修改

8.2 变量管理最佳实践

batch 复制代码
REM ✅ 集中管理配置
set MVN=...
set JAVA_HOME=...

REM ✅ 使用有意义的变量名
set PROJECT_DIR=%~dp0

REM ✅ 路径加引号
if not exist "%MVN%" (

8.3 错误处理模式

batch 复制代码
REM 1. 前置检查
if not exist "%JAVA_HOME%\bin\java.exe" (
    echo [ERROR] ...
    pause
    exit /b 1
)

REM 2. 操作后检查
call command
if %errorlevel% neq 0 (
    echo FAILED
    goto MENU
)

REM 3. 成功提示
echo [SUCCESS] ...

8.4 流程控制模式

batch 复制代码
REM 菜单循环
:MENU
set /p choice=Choice: 
if "%choice%"=="1" goto FUNC1
goto MENU

REM 功能返回菜单
:FUNC1
do-something
goto MENU

8.5 调用外部命令规则

batch 复制代码
REM ✅ 调用批处理文件用 call
call "%MVN%" clean install

REM ✅ 执行可执行文件直接调用
java -version

REM ✅ 路径含空格加引号
call "D:\Program Files\Maven\bin\mvn.cmd"

九、常见问题和解决方案

9.1 脚本放错位置

问题: 提示 pom.xml not found

原因: 脚本没有放在项目根目录

解决:

复制代码
正确结构:
项目根目录/
├── 一键启动.bat    ← 必须在这里
├── pom.xml
└── src/

9.2 JDK或Maven路径错误

问题: 提示 JDK not foundMaven not found

解决:

  1. 用记事本打开脚本

  2. 修改顶部的路径配置:

    batch 复制代码
    set MVN=你的Maven路径\bin\mvn.cmd
    set JAVA_HOME=你的JDK17路径
  3. 保存后重新运行

9.3 中文乱码

问题: 中文显示为乱码

解决方案:

  • ✅ 使用英文(脚本已采用)
  • ✅ 或在开头添加 chcp 65001 >nul

9.4 Maven命令执行后不返回

问题: 执行Maven后脚本终止

原因: 没有使用 call

解决:

batch 复制代码
REM ✅ 正确
call "%MVN%" clean install

REM ❌ 错误
"%MVN%" clean install

9.5 路径切换失败

问题: cd 命令不生效

解决:

batch 复制代码
REM ✅ 使用 /d 参数
cd /d %PROJECT_DIR%

REM ❌ 错误
cd %PROJECT_DIR%

十、使用指南

10.1 首次使用

  1. 修改配置

    batch 复制代码
    用记事本打开脚本,修改:
    set MVN=你的Maven路径
    set JAVA_HOME=你的JDK17路径
  2. 放置位置

    复制代码
    将脚本放在项目根目录(与pom.xml同级)
  3. 运行脚本

    复制代码
    双击 一键启动.bat

10.2 典型工作流程

复制代码
启动脚本
  ↓
自动检测项目目录
  ↓
验证环境(JDK、Maven、pom.xml)
  ↓
显示菜单
  ↓
选择操作 → 执行 → 返回菜单
  ↓
选择8退出

10.3 多项目使用

步骤:

  1. 复制脚本到新项目根目录
  2. 无需修改任何路径(JDK和Maven是个人配置)
  3. 直接运行

示例:

复制代码
项目A/
├── 一键启动.bat    ← 复制一份
└── pom.xml

项目B/
├── 一键启动.bat    ← 复制一份
└── pom.xml

10.4 团队协作

方案1:创建模板

batch 复制代码
创建 project-start-template.bat
团队成员复制后修改JDK和Maven路径即可

方案2:统一环境

复制代码
团队使用相同的JDK和Maven安装路径
脚本可以共享,无需修改

十一、高级技巧

11.1 添加自定义功能

batch 复制代码
REM 在菜单中添加新选项
echo 9. Run Custom Task

REM 添加路由
if "%choice%"=="9" goto CUSTOM

REM 实现功能
:CUSTOM
echo Running custom task...
call "%MVN%" your:custom-goal
pause
goto MENU

11.2 设置Maven Profile

batch 复制代码
:BUILD_WITH_PROFILE
echo ===== Building with Profile =====
set /p profile=Enter profile name: 
call "%MVN%" clean install -P%profile% -DskipTests
pause
goto MENU

11.3 自动更新依赖

batch 复制代码
:UPDATE_DEPS
echo ===== Updating Dependencies =====
call "%MVN%" clean install -U -DskipTests
pause
goto MENU

11.4 日志输出到文件

batch 复制代码
:BUILD_WITH_LOG
echo ===== Building with Log =====
call "%MVN%" clean install -DskipTests > build.log 2>&1
echo Log saved to build.log
pause
goto MENU

十二、完整语法速查表

语法 说明 示例
@echo off 关闭回显 @echo off
echo 输出文本 echo Hello
echo. 输出空行 echo.
set 设置变量 set VAR=value
%VAR% 引用变量 echo %VAR%
%~dp0 脚本路径 set DIR=%~dp0
if exist 检查文件 if exist "file"
if %ERRORLEVEL% neq 0 检查错误 判断成功失败
goto LABEL 跳转 goto MENU
:LABEL 标签定义 :MENU
set /p 用户输入 set /p VAR=Prompt:
call 调用脚本 call "script.bat"
pause 暂停 pause
exit /b 0 退出 exit /b 0
cd /d 切换目录 cd /d D:\path
REM / :: 注释 REM comment
chcp 65001 设置UTF-8 chcp 65001 >nul

十三、最佳实践清单

✅ 配置管理

  • 集中定义所有路径变量
  • 使用有意义的变量名
  • 添加注释说明每个变量
  • 个人配置(JDK、Maven)与项目配置分离

✅ 可移植性

  • 使用 %~dp0 获取项目路径
  • 使用 cd /d 切换目录
  • 避免硬编码项目路径
  • 动态查找输出文件

✅ 错误处理

  • 检查关键文件是否存在
  • 验证命令执行结果
  • 提供清晰的错误信息
  • 使用 pause 等待用户查看

✅ 用户体验

  • 显示清晰的菜单
  • 提供操作反馈
  • 使用英文避免编码问题
  • 路径加引号处理空格

✅ 代码质量

  • 添加充分注释
  • 使用统一的代码风格
  • 功能模块化设计
  • 错误码规范管理

十四、实战练习

练习1:创建最简单的菜单脚本

batch 复制代码
@echo off
:MENU
cls
echo 1. Show Date
echo 2. Show Time
echo 3. Exit

set /p choice=Choice: 
if "%choice%"=="1" echo %date%
if "%choice%"=="2" echo %time%
if "%choice%"=="3" goto END
pause
goto MENU

:END
echo Bye!

练习2:修改为其他项目

  1. 复制脚本到新的Maven项目
  2. 修改JDK和Maven路径
  3. 直接运行测试

练习3:添加自定义功能

batch 复制代码
REM 添加查看项目信息功能
echo 9. Show Project Info

if "%choice%"=="9" goto INFO

:INFO
echo ===== Project Information =====
type pom.xml | find "<artifactId>"
type pom.xml | find "<version>"
pause
goto MENU

十五、总结

核心知识点

  1. %~dp0 是可移植性的关键

    • 自动获取脚本所在目录
    • 不依赖硬编码路径
    • 复制即用
  2. 配置集中化管理

    • JDK和Maven路径在顶部
    • 项目路径自动检测
    • 易于维护和修改
  3. 完善的错误处理

    • 前置环境检查
    • 操作结果验证
    • 友好的错误提示
  4. 交互式菜单设计

    • 清晰的选项列表
    • 循环返回菜单
    • 灵活的功能扩展
相关推荐
小杍随笔1 小时前
【Rust 工具链管理完全指南:rustup toolchain 命令实战详解】
开发语言·后端·rust
还是鼠鼠1 小时前
AI掘金头条新闻系统 (Toutiao News)-获取用户信息
后端·python·mysql·fastapi·web
BingoGo1 小时前
免费可商用 PHP 管理后台 CatchAdmin V5.3.1 发布 后台打包直降 5s 内
后端·php
JaguarJack2 小时前
免费可商用 PHP 管理后台 CatchAdmin V5.3.1 发布 后台打包直降 5s 内
后端·php·laravel
AI行业学习2 小时前
.NET Framework 3.5 SP1 完整离线包(2029.5.29)
开发语言·windows·.net
阿昭L2 小时前
调试CreateProcess
windows·进程·逆向工程·windows内核
小张小张爱学习2 小时前
Spring Boot 多线程并发入门教程:ThreadPoolTaskExecutor + CompletableFuture
java·spring boot·后端
西安邮电大学3 小时前
Redis核心数据结构以及应用场景
java·redis·后端·其他·面试
AskHarries3 小时前
做 SaaS 还是做 App
后端