批处理脚本 (Batch Script),即扩展名为
.bat或.cmd的文本文件,是 Windows 操作系统中基于 CMD 命令解释器的一种自动化脚本语言。它允许你将多个 DOS/Windows 命令按逻辑顺序组合在一起,从而实现重复性任务的自动化。
开发环境准备
- 编辑器:任何文本编辑器均可(如记事本、VS Code、Notepad++)。
- 运行方式 :
- 双击
.bat文件 - 在 CMD 中执行
脚本名.bat
- 双击
- 调试技巧 :
- 使用
pause暂停查看输出 - 使用
echo on/off控制命令回显
- 使用
基础语法详解
1. 基本结构
bash
@echo off
echo Hello, World!
pause
@echo off:关闭命令回显(前面加@表示该行也不显示)echo:在命令行中输出信息pause:暂停脚本,等待用户按键继续

2. 变量操作
bash
set name=张三
echo 你好,%name%!
set:定义变量%变量名%:引用变量
注意:变量作用域为当前 CMD 会话,除非使用
setlocal和endlocal显式控制。
3. 流程控制
if 条件判断
bash
set /p age=请输入年龄:
if %age% geq 18 (
echo 你已成年。
) else (
echo 你还未成年。
)

for 循环
bash
for %%f in (*.txt) do (
echo 找到文件:%%f
)
在脚本中使用
%%,在命令行中使用%。
4. 函数定义(子程序)
bash
@echo off
call :sayHello "程序员"
exit /b
:sayHello
echo 你好,%~1!
goto :eof
call :label:调用子程序%~1:去除参数引号goto :eof:返回主程序(相当于 return)
注:如果出现乱码的情况,有可能是脚本编辑的时候使用UTF-8编码,而命令工具使用ANSI(GBK)编码,需要使用notepad++或者其他工具转码

案例一:自动备份工具(文件同步)
需求
每天将 C:\MyDocs 目录下的所有文件备份到 D:\Backup,并以当前日期命名子文件夹。
分步解析
第1步:理解核心命令 ------ xcopy
xcopy 是 Windows 内置的高级复制命令,支持递归复制目录。
/E:复制所有子目录(包括空目录)/I:目标为目录时自动创建/Y:不提示确认覆盖
第2步:获取当前日期
Windows 的 %date% 变量格式为 2026/04/14(中文系统),需提取年月日:
bash
%date:~0,4% → 年(2026)
%date:~5,2% → 月(04)
%date:~8,2% → 日(14)
第3步:组合完整路径
bash
set backup=D:\Backup\MyDocs_%date:~0,4%%date:~5,2%%date:~8,2%
结果示例:D:\Backup\MyDocs_20260414
第4步:编写脚本
bash
@echo off
:: 设置源目录和备份目录
set source=C:\MyDocs
set backup=D:\Backup\MyDocs_%date:~0,4%%date:~5,2%%date:~8,2%
:: 执行备份
xcopy "%source%" "%backup%" /E /I /Y
:: 提示完成
echo 备份完成!备份路径:%backup%
pause
关键点
- 路径含空格时必须加双引号(如
"C:\My Documents") - 使用
::添加注释(比rem更高效)
案例二:批量重命名工具(图片整理)
需求
将当前目录下所有 .jpg 文件重命名为 photo_1.jpg, photo_2.jpg...
分步解析
第1步:启用延迟变量扩展
普通变量 %i% 在循环中无法实时更新,需启用延迟扩展:
bash
setlocal enabledelayedexpansion
之后用 !i! 引用变量。
第2步:初始化计数器
bash
set i=1
第3步:遍历文件
bash
for %%f in (*.jpg) do (
ren "%%f" "photo_!i!.jpg"
set /a i+=1 :: 算术运算需加 /a
)
第4步:完整脚本
bash
@echo off
setlocal enabledelayedexpansion
:: 初始化计数器
set i=1
:: 遍历所有JPG文件
for %%f in (*.jpg) do (
echo 正在重命名: %%f → photo_!i!.jpg
ren "%%f" "photo_!i!.jpg"
set /a i+=1
)
echo 重命名完成!共处理 !i! 个文件。
pause
关键点
for循环中的变量必须用%%f(脚本中)而非%fset /a用于数值计算(如i+=1)
案例三:智能定时关机程序
需求
设置1小时后自动关机,并提供取消方法。
分步解析
第1步:使用 shutdown 命令
/s:关机/t 3600:3600秒后执行(1小时)/c "消息":显示提示信息
第2步:提供取消指令
用户可在倒计时结束前运行 shutdown /a 取消。
第3步:完整脚本
bash
@echo off
echo 即将设置1小时后关机...
echo 取消方法:按 Win+R 输入 "shutdown /a" 回车
:: 设置关机计划
shutdown /s /t 3600 /c "系统将在1小时后关机,请保存工作!"
:: 等待用户确认
pause
扩展功能
添加交互式时间输入:
bash
set /p minutes=请输入关机延迟分钟数:
set /a seconds=minutes*60
shutdown /s /t %seconds% /c "自定义关机计划"
调试技巧
- 开启回显 :删除
@echo off查看每一步执行 - 日志记录 :
echo [INFO] 步骤1 >> log.txt - 错误处理 :
if errorlevel 1 echo 上一步失败
进阶学习建议
- 学习
for /f解析文件或命令输出 - 掌握
findstr、tasklist、netstat等高级命令 - 结合
PowerShell处理更复杂任务(.bat适合轻量级任务) - 配合
AI实现复杂的脚本实现
结语
批处理脚本虽"古老",但在 Windows 自动化领域依然有其不可替代的价值。掌握它,你就能轻松应对日常重复操作。
延伸阅读:
