首页/系统/Windows 运维速查/批处理文件基础模板
CMD 常用命令74 条

批处理文件基础模板

一个可维护 .bat 的最小骨架:@echo off、注释、参数与 %~dp0 定位自身目录,是所有 CMD 自动化的起点。

Windows 运维速查系统更新于 2026-10-13

批处理是什么

批处理文件(扩展名 .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)。跨机器分发前先确认对方的代码页设置,否则中文会变成乱码,连错误提示也看不懂。

易错点

  • 把 :: 当注释写在 if 或 for 的括号块内会触发解析错误,块内注释一律改用 REM
  • 忘了 setlocal 会让脚本变量写进调用者的环境,在长流程或互相调用的脚本之间互相干扰
  • 不用 %~dp0 而依赖相对路径,脚本被计划任务或从其他目录调用时会找不到文件
  • 双击运行与命令行运行的工作目录不同,依赖相对路径的脚本两种方式下行为可能不一致
  • 参数含空格却没有加引号会被拆成多个参数,取值时统一写成带引号的形式更稳

数据来源与参考

  • Microsoft Learn:批处理参数与命令参考
  • Microsoft Learn:call 与参数替换语法

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌