Windows 批处理脚本(Batch Script)编写手册


目录

  1. 简介
  2. 基本语法
  3. 常用命令
  4. 变量与参数
  5. 流程控制
  6. 注释与可读性
  7. 错误处理
  8. 最佳实践
  9. 示例脚本
  10. 参考资源

简介

批处理脚本(Batch File)是 Windows 系统中一种使用 .bat.cmd 扩展名的脚本文件,由一系列命令行命令组成,用于自动化重复性任务。它由 Windows 命令解释器(cmd.exe)执行。


基本语法

  • 文件扩展名:.bat.cmd
  • 每行一条命令(长命令可使用 ^ 换行)
  • 不区分大小写(但建议统一风格)
  • 使用 @echo off 关闭命令回显(推荐放在脚本开头)
@echo off
echo Hello, World!
pause

常用命令

命令说明
echo显示文本或开关命令回显
set设置/显示环境变量
if条件判断
for循环结构
goto跳转到标签
call调用另一个批处理文件或子程序
start启动程序或窗口
copy, move, del, mkdir, rmdir文件/目录操作
exit退出脚本或 cmd
pause暂停并等待用户按键

变量与参数

环境变量

set MY_VAR=Hello
echo %MY_VAR%

命令行参数

  • %0:脚本自身名称
  • %1%9:前9个参数
  • %*:所有参数
  • 使用 shift 可访问第10个及以上参数
@echo off
echo 脚本名:%0
echo 第一个参数:%1
echo 所有参数:%*

延迟变量扩展(重要!)

iffor 块中,使用 !var! 代替 %var% 获取实时值(需启用):

@echo off
setlocal enabledelayedexpansion
set count=0
for %%i in (a b c) do (
    set /a count+=1
    echo 当前计数:!count!
)

流程 控制

条件判断

if exist "C:\test.txt" (
    echo 文件存在
) else (
    echo 文件不存在
)

if "%1"=="install" (
    call :install
)

循环

for %%f in (*.txt) do echo %%f

for /L %%i in (1,1,5) do echo %%i

子程序(类似函数)

call :myfunc arg1 arg2
goto :eof

:myfunc
echo 参数1:%1,参数2:%2
goto :eof

注释与可读性

  • 使用 REM:: 添加注释
  • 建议使用 ::(更高效)
:: 这是一个注释
REM 这也是一个注释
  • 保持缩进和空行提高可读性

错误处理

  • 检查 %ERRORLEVEL%(上一条命令的返回码)
  • 0 表示成功,非0表示错误
copy file.txt dest\
if %ERRORLEVEL% neq 0 (
    echo 复制失败!
    exit /b 1
)

最佳实践

推荐做法

  • 脚本开头使用 @echo off
  • 使用 setlocal 避免污染全局环境
  • 路径用双引号包裹(防止空格问题)
  • 使用延迟扩展处理动态变量
  • 添加错误检查和日志输出
  • 保持脚本简洁,复杂逻辑考虑 PowerShell

避免

  • 硬编码路径(尽量使用相对路径或参数)
  • 过度使用 goto(降低可读性)
  • 忽略错误处理

示例脚本

示例1:备份指定目录

@echo off
setlocal

set SOURCE=C:\MyData
set DEST=D:\Backup\%date:~0,4%-%date:~5,2%-%date:~8,2%

if not exist "%DEST%" mkdir "%DEST%"
robocopy "%SOURCE%" "%DEST%" /E /Z /R:3 /W:5

if %ERRORLEVEL% leq 1 (
    echo 备份成功!
) else (
    echo 备份失败!
)

pause

示例2:批量重命名

@echo off
setlocal enabledelayedexpansion

set i=1
for %%f in (*.jpg) do (
    ren "%%f" "photo_!i!.jpg"
    set /a i+=1
)
echo 重命名完成。

参考资源


📝 提示:对于复杂任务,建议使用 PowerShell 替代批处理脚本,功能更强大且更安全。