Windows 批处理(bat)入门指南:零基础写出第一个自动化脚本
批处理(Batch File)是 Windows 上最轻量的自动化方式:把平时一条条敲的命令写进一个 .bat 文本文件里,双击它,系统就会用命令提示符(CMD)逐行自动执行。清理临时文件、批量重命名、定时备份,这类重复劳动都可以写成批处理一键完成。
它不需要安装任何软件,记事本就能编辑,适合不想学完整编程语言、但有简单自动化需求的用户。下面从零开始讲。
批处理文件是什么
批处理文件就是扩展名为 .bat(或 .cmd)的纯文本文件,里面是按顺序排列的命令行。双击运行时,系统调用 CMD.exe 逐行解析并执行这些命令,就像你在命令提示符窗口里手动输入一样。
创建方法很简单:
- 在桌面或任意文件夹新建一个文本文档
- 把文件名后缀从 .txt 改成 .bat(系统弹出「扩展名更改可能影响使用」的提示,点「是」)
- 右键选择「编辑」,写入命令后保存
如果文件管理器不显示扩展名,先打开「查看 → 显示 → 文件扩展名」开关。
第一个脚本:三行起步
把下面三行保存为 test.bat 并双击运行:
@echo off
echo Hello, World!
pause
@echo off:关闭命令回显,不显示命令本身,只显示输出结果echo:在窗口输出后面的文字pause:暂停并显示「请按任意键继续」,防止窗口一闪而过
这是批处理的经典开场组合,几乎所有脚本都以这三行开头。
常用命令速查
| 命令 | 作用 | 示例 | |------|------|------| | echo | 输出文字 | echo 正在清理文件... | | rem | 注释,不执行 | rem 这是说明文字 | | :: | 另一种注释写法 | :: 建议只在行首使用 | | pause | 暂停等待按键 | pause | | set | 定义变量 | set name=张三 | | title | 修改窗口标题 | title 我的备份脚本 | | color | 设置窗口颜色 | color 0a | | start | 启动程序或文件 | start notepad | | mkdir | 创建文件夹 | mkdir D:\backup | | del | 删除文件 | del /q D:\temp\*.tmp | | if | 条件判断 | if exist 文件 echo 存在 |
变量使用时用百分号包裹,比如定义了 set name=张三,后面用 %name% 引用。注意等号两边不能有空格,set name = 张三 会把「name 」整个当成变量名,是个经典坑。
变量与特殊值
批处理内置了一些随时可用的变量:
%date%:当前日期%time%:当前时间%random%:0 到 32767 的随机数%errorlevel%:上一条命令的返回值,0 表示成功,非 0 表示出错%0:脚本自身路径%~dp0:脚本所在目录(带反斜杠),做备份脚本时十分常用
判断命令是否成功,可以这样写:
ping -n 1 baidu.com >nul
if %errorlevel%==0 (echo 网络正常) else (echo 网络不通)
pause
>nul 表示把 ping 的输出丢弃,只看返回码,是批处理里的常用技巧。
两个可以直接用的实用脚本
一键清理临时文件(保存为 clear-temp.bat):
@echo off
title 清理临时文件
echo 正在清理系统临时目录...
del /q /s %temp%\* >nul 2>nul
echo 正在清理 Windows 临时目录...
del /q /s C:\Windows\Temp\* >nul 2>nul
echo 清理完成!
pause
把指定文件夹备份到 D 盘(把路径改成你自己的,保存为 backup.bat):
@echo off
title 文件夹备份
set source=D:\我的文档
set target=D:\backup
mkdir %target% 2>nul
xcopy "%source%" "%target%" /e /i /y
echo 备份完成,文件在 %target%
pause
xcopy 的 /e 表示连空文件夹一起复制,/i 表示目标为文件夹,/y 表示覆盖时不询问。
进阶与注意事项
- 中文乱码:批处理文件默认按系统编码解析,Windows 中文系统下建议用记事本以 ANSI(GBK)编码保存,UTF-8 保存的中文注释可能显示乱码。
- 管理员权限:需要修改系统目录、服务或注册表的脚本,右键 .bat 文件选择「以管理员身份运行」,否则可能提示拒绝访问。
- 先测试再使用:涉及删除文件(del)的脚本,先在临时目录用小范围路径测试,确认无误再对真实目录运行。
- 循环与判断:需要处理多个文件时可使用
for循环,例如for %%i in (*.txt) do echo %%i逐条处理当前目录的 txt 文件(注意循环变量的百分号要写两个)。 - 与任务计划程序配合:把写好的 .bat 挂到任务计划程序,就能实现定时自动执行,比如每天上班前自动备份,详见站内任务计划程序相关文章。
批处理虽简单,但它直接调用系统命令,写错了可能删错文件,所以「先小范围测试」这条原则比任何技巧都重要。
更多实用场景:批量重命名与条件判断
批处理的另一个高频用法是批量处理文件。比如给当前目录里所有 jpg 图片统一加前缀「备份_」,保存为 rename.bat 放到图片所在目录运行:
@echo off
title 批量重命名
set prefix=备份_
for %%i in (*.jpg) do (
ren "%%i" "%prefix%%%i"
)
echo 重命名完成
pause
说明:for %%i in (*.jpg) 逐个取出当前目录的 jpg 文件,ren 把它们改名为「备份_原名.jpg」。「%%i」在 .bat 文件里必须写两个百分号,直接命令行里写一个,这是最容易踩的坑。建议先在放了两三个测试图片的文件夹里试跑。
配合条件判断还能写出更稳的脚本,例如「只在目标目录存在时才继续」:
@echo off
if not exist "D:\backup" (
echo 备份目录不存在,正在创建...
mkdir "D:\backup"
)
echo 目录检查完成
pause
if not exist 路径 是批处理里最常用的预检查写法,能避免脚本因为路径不存在而报错中断。结合 GOTO 标号还可以做更复杂的分支跳转,但日常自动化用 if/for 配合上面几个命令已经能覆盖绝大多数场景。
做完这几件再收工
- 新建一个 hello.bat,写入三行基础命令,双击确认能正常输出
- 用 set 定义一个变量并在 echo 中输出,确认写法和引用方式
- 把 clear-temp.bat 先复制一份,把里面的 %temp% 改成临时测试目录运行一次
- 打开记事本确认「文件 → 另存为」里编码可选 ANSI,便于中文注释不乱码
- 想定时执行的话,打开任务计划程序看一眼「创建基本任务」入口在哪