批处理是什么
批处理文件(扩展名 .bat 或 .cmd)把一串 CMD 命令按顺序执行,是 Windows 上免安装、免依赖的自动化手段。写一个可维护骨架的要点:首行关闭命令回显、切到脚本自身目录、用 setlocal 隔离变量、用 %1 与 %* 接参数、用 %~dp0 定位脚本所在路径。
基本信息
| 适用平台 | Windows CMD(cmd.exe,无需额外运行时) |
|---|---|
| 文件扩展名 | .bat 与 .cmd,后者语义略保守 |
| 注释写法 | REM 最通用;:: 在括号块内会引发解析错误 |
| 参数 | %1 至 %9 按位置取参,%* 为全部参数,%0 为脚本自身路径 |
| 路径变量 | %~dp0 脚本所在目录(含末尾反斜杠)、%~n0 文件名、%~x0 扩展名 |
| 变量作用域 | setlocal 开局、endlocal 收尾,避免污染调用者环境 |
典型使用场景
- 计划任务里做文件清理、备份与日志归档,不依赖任何第三方组件
- 把多步手工操作(复制、改名、调用外部程序)固化成一条命令
- 部署前做环境自检,判断目录、服务与端口是否就绪
- 用 %~dp0 保证脚本被任意路径调用时都能找到旁边的配置与模板
- 作为打包或安装流程的外壳,串起编译、压缩与上传程序
最小骨架
最小骨架
@echo off
setlocal
REM 切到脚本所在目录,避免依赖调用方的当前路径
cd /d %~dp0
REM %1 第一个参数,%* 全部参数,%~dp0 脚本目录
if not exist logs md logs
echo 任务开始 %date% %time%
echo 参数: %*
echo 脚本目录: %~dp0
call :main
endlocal
exit /b 0
:main
REM 主体逻辑写在子标签里,方便分段调试
echo 步骤一:准备目录
echo 步骤二:执行任务
if errorlevel 1 echo 上一步失败,检查退出码常用变量与含义
| 写法 | 含义 | 典型用途 |
|---|---|---|
| %~dp0 | 脚本所在目录,含末尾反斜杠 | 拼接脚本旁的配置与模板文件 |
| %0 | 脚本自身完整路径 | 在日志里记录调用来源 |
| %~n0 与 %~x0 | 脚本文件名与扩展名 | 生成同名的日志文件 |
| %1 与 %2 | 命令行的第一、第二个参数 | 传入目标目录或环境名 |
| %* | 全部参数原样 | 透传给被调用的外部程序 |
延迟变量扩展:在 for 或 if 的括号块里要读取同一块内刚赋值的变量,必须先用 setlocal enabledelayedexpansion,再用 !变量! 引用;写 %变量% 只会取到进入该块之前的值。
脚本里含中文注释或提示时,文件编码必须与控制台代码页匹配(简体中文默认 936)。跨机器分发前先确认对方的代码页设置,否则中文会变成乱码,连错误提示也看不懂。