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

批处理脚本 (Batch Script),即扩展名为 .bat.cmd 的文本文件,是 Windows 操作系统中基于 CMD 命令解释器的一种自动化脚本语言。它允许你将多个 DOS/Windows 命令按逻辑顺序组合在一起,从而实现重复性任务的自动化。

开发环境准备

  1. 编辑器:任何文本编辑器均可(如记事本、VS Code、Notepad++)。
  2. 运行方式
    • 双击 .bat 文件
    • 在 CMD 中执行 脚本名.bat
  3. 调试技巧
    • 使用 pause 暂停查看输出
    • 使用 echo on/off 控制命令回显

基础语法详解

1. 基本结构

bash 复制代码
@echo off
echo Hello, World!
pause
  • @echo off:关闭命令回显(前面加 @ 表示该行也不显示)
  • echo:在命令行中输出信息
  • pause:暂停脚本,等待用户按键继续

2. 变量操作

bash 复制代码
set name=张三
echo 你好,%name%!
  • set:定义变量
  • %变量名%:引用变量

注意:变量作用域为当前 CMD 会话,除非使用 setlocalendlocal 显式控制。

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 解析文件或命令输出
  • 掌握 findstrtasklistnetstat 等高级命令
  • 结合 PowerShell 处理更复杂任务(.bat 适合轻量级任务)
  • 配合AI实现复杂的脚本实现

结语

批处理脚本虽"古老",但在 Windows 自动化领域依然有其不可替代的价值。掌握它,你就能轻松应对日常重复操作。

延伸阅读

相关推荐
idolao2 小时前
Android Studio 2022安装与汉化教程 Windows版:解压+管理员运行+自定义路径+SDK配置+中文插件指南
android·windows·android studio
摇滚侠2 小时前
Groovy 如何给集合中添加元素
java·开发语言·windows·python
wei_shuo3 小时前
解放双手!用Windows搭建闲鱼0成本“赚米神器”!AI客服秒回复!
人工智能·windows
洛水如云4 小时前
换新电脑数据迁移全攻略:2 种方法转移文件 / 系统
windows·microsoft·电脑
chushiyunen5 小时前
posting替换postman(好像还是不太好用)
windows
overmind5 小时前
oeasy Python 120[专业选修]列表_直接赋值_浅拷贝_shallowcopy_深拷贝_deepcopy
linux·windows·python
ulias2125 小时前
Linux中的开发工具
linux·运维·服务器·开发语言·c++·windows
Ai.den5 小时前
Windows 安装 DeerFlow 2.0
人工智能·windows·python·ai
openallzzz6 小时前
【多动手】windows 下使用 docker 启动 Java 服务(docker desktop + wsl)
java·运维·windows·docker·容器