生命之风的低语
Whispers in the Wind of Life.

Windows批处理脚本(.bat)从零到精通:详细教程与实战案例

2026-07-19 23:48:07

批处理脚本 (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(脚本中)而非 %f

set /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 自动化领域依然有其不可替代的价值。掌握它,你就能轻松应对日常重复操作。

延伸阅读:

Microsoft 官方 CMD 文档

SS64 BAT 命令参考