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 脚本设计原则
- 配置集中化 - 所有路径在顶部配置
- 项目路径自动化 - 使用
%~dp0自动检测 - 环境检查前置 - 启动前验证依赖
- 错误处理完善 - 每个操作都有反馈
- 菜单循环设计 - 操作完成后返回菜单
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%
解析:
-
设置Maven路径
batchset MVN=D:\SoftWare\Maven\apache-maven-3.6.3\bin\mvn.cmd- 指定Maven可执行文件的完整路径
- 这是个人配置,根据实际安装位置修改
-
设置JDK路径
batchset JAVA_HOME=D:\SoftWare\jdk\jdk17- 指定JDK 17的安装路径
- Spring Boot 3.x 要求JDK 17+
-
更新PATH环境变量
batchset 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%
解析:
-
获取脚本所在目录
batchset PROJECT_DIR=%~dp0%~dp0- 脚本文件所在的目录路径- 自动获取,无需硬编码
- 这是实现可移植性的关键
-
切换到项目目录
batchcd /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
)
解析:
-
检查Java可执行文件
batchif not exist "%JAVA_HOME%\bin\java.exe"if not exist- 检查文件是否不存在- 路径加引号防止空格导致问题
-
错误处理
batchecho [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.
解析:
-
验证Java版本
- 因为PATH已设置为JDK 17,这里会显示正确版本
-
检查Maven存在性
- 验证Maven路径是否正确
-
显示Maven版本
batchcall "%MVN%" -versioncall- 调用批处理文件并返回- 必须使用
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):
解析:
-
:MENU标签- 定义跳转点,用于循环显示菜单
- 每次操作完成后返回这里
-
显示菜单选项
- 列出所有可用操作(1-8)
- 使用英文避免编码问题
-
获取用户输入
batchset /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
解析:
-
字符串比较
batchif "%choice%"=="1" goto CHECK- 变量加引号防止空值语法错误
- 如果choice为空,
""=="1"仍然合法
-
goto语句
- 无条件跳转到指定标签
- 实现菜单选择的功能路由
-
无效输入处理
batchecho 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
解析:
-
执行Maven构建
batchcall "%MVN%" clean install -DskipTestsclean- 清理target目录install- 编译、测试、打包、安装-DskipTests- 跳过测试(加快速度)
-
检查构建结果
batchif %errorlevel% neq 0 ( echo [ERROR] Build FAILED! pause goto MENU )%errorlevel%- 命令返回码neq- 不等于- 非0表示失败,显示错误并返回菜单
-
成功提示
- 显示成功消息
- 暂停让用户看到
- 返回菜单
功能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
解析:
-
显示提示信息
- 说明端口配置在application.yml中
- 提示如何停止应用
-
启动SpringBoot
batchcall "%MVN%" spring-boot:runspring-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
解析:
-
执行打包
batchcall "%MVN%" clean package -DskipTestspackage- 打包成JAR(不安装到仓库)
-
动态查找JAR文件
batchdir /b target\*.jar 2>nul/b- 简洁格式(只显示文件名)*.jar- 匹配所有JAR文件2>nul- 隐藏错误信息
-
显示运行方式
- 提示如何使用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%
为什么能实现可移植?
%~dp0自动获取脚本位置- 不依赖任何硬编码路径
- 适配任何项目根目录
- 复制即用,无需修改
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 found 或 Maven not found
解决:
-
用记事本打开脚本
-
修改顶部的路径配置:
batchset MVN=你的Maven路径\bin\mvn.cmd set JAVA_HOME=你的JDK17路径 -
保存后重新运行
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 首次使用
-
修改配置
batch用记事本打开脚本,修改: set MVN=你的Maven路径 set JAVA_HOME=你的JDK17路径 -
放置位置
将脚本放在项目根目录(与pom.xml同级) -
运行脚本
双击 一键启动.bat
10.2 典型工作流程
启动脚本
↓
自动检测项目目录
↓
验证环境(JDK、Maven、pom.xml)
↓
显示菜单
↓
选择操作 → 执行 → 返回菜单
↓
选择8退出
10.3 多项目使用
步骤:
- 复制脚本到新项目根目录
- 无需修改任何路径(JDK和Maven是个人配置)
- 直接运行
示例:
项目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:修改为其他项目
- 复制脚本到新的Maven项目
- 修改JDK和Maven路径
- 直接运行测试
练习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
十五、总结
核心知识点
-
%~dp0是可移植性的关键- 自动获取脚本所在目录
- 不依赖硬编码路径
- 复制即用
-
配置集中化管理
- JDK和Maven路径在顶部
- 项目路径自动检测
- 易于维护和修改
-
完善的错误处理
- 前置环境检查
- 操作结果验证
- 友好的错误提示
-
交互式菜单设计
- 清晰的选项列表
- 循环返回菜单
- 灵活的功能扩展