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

延伸阅读

相关推荐
三无推导8 小时前
ComfyUI 安装部署教程:Windows 下快速搭建可视化 AI 绘图工作流,零基础也能跑通
人工智能·pytorch·windows·stable diffusion·aigc·ai绘画·持续部署
nnsix11 小时前
PS【PhotoShop】实现拷贝到Windows粘贴板上
windows
сокол11 小时前
【网安-Web渗透测试-免杀系列】内存免杀(无文件落地)
windows·网络安全
玖釉-11 小时前
二叉树基础详解:TreeNode、buildTree、deleteTree 与 printTree 的实现原理(C++)
c++·windows·算法
心之所向,自强不息11 小时前
# Unity MCP + Codex CLI 完整教程(Windows)
windows·unity·游戏引擎
特立独行的猫a11 小时前
Fast DDS Monitor Windows x64 从源码编译安装完全教程
windows·monitor·dds·fastdds·fastddsmonitor
慵懒的猫mi12 小时前
deepin 25部署x11vnc+xrdp,实现vnc和mstsc双重访问
linux·windows·开源软件·deepin
神仙别闹13 小时前
基于C语言 实现 Windows PE 文件解析
c语言·windows·microsoft
kebeiovo13 小时前
Codex在Windows安装配置指南
windows
daad77713 小时前
wsl2上的 gz sim 安装 gazebo
windows