在日常使用Windows系统时,很多人会用到批处理(.bat)文件来自动完成一些重复性任务,比如备份文件、清理垃圾、批量重命名等。当你写的批处理脚本越来越复杂,就需要让它变得更灵活——这时候,传参数就成了关键。
什么是批处理传参数?
简单来说,就是运行一个.bat文件时,后面带上一些额外的信息。比如你输入:backup.bat D:\Docs E:\Backup
这里的 D:\Docs 和 E:\Backup 就是传进去的参数,脚本可以根据这两个路径执行不同的操作。
批处理中如何接收参数?
在批处理脚本里,系统用 %1、%2、%3……这样的形式来代表传入的第1个、第2个、第3个参数。最多可以支持到 %9。
举个例子,写一个简单的 greet.bat:
@echo off
echo 你好,%1,欢迎使用本工具!
pause
然后在命令行运行:greet.bat 张三
屏幕上就会显示:你好,张三,欢迎使用本工具!
处理多个参数的实际场景
假设你要做一个日志归档脚本 archive.bat,需要传入源目录和目标目录:
@echo off
set source=%1
set target=%2
echo 正在将 %source% 的内容复制到 %target% ...
xcopy "%source%" "%target%" /E /I
echo 完成!
运行时输入:archive.bat C:\Logs D:\Archive\2024
脚本就能自动执行复制任务。
怎么处理带空格的路径?
用户经常把文件放在“我的文档”、“Program Files”这类带空格的路径下。如果不加引号,批处理会把空格当成参数分隔符,导致出错。
解决办法是:在使用参数时,始终用双引号包裹 %1、%2 等变量,就像上面例子中的 "%source%"。
用 %* 获取所有参数
有时候你不确定要传多少个参数,比如要批量处理多个文件。这时可以用 %* 表示全部参数。
例如,写一个 listfiles.bat:
@echo off
echo 你传入了以下文件:
echo %*
for %%f in (%*) do (
echo 处理文件:%%f
)
运行:listfiles.bat a.txt b.txt c.txt
就会逐个列出每个文件。
判断参数是否为空
用户可能忘记输参数,脚本直接运行就会出错。可以用 if 判断参数是否存在:
@echo off
if "%1"=="" (
echo 错误:请指定源目录。
exit /b 1
)
echo 开始处理 %1 ...
这样如果用户只运行 script.bat 没带参数,就会提示错误并退出。
小技巧:用 shift 命令处理超过9个参数
标准的 %1 到 %9 只能取前9个参数。如果真有第十个怎么办?可以用 shift 命令把参数左移。
比如:
@echo off
echo 第一个参数:%1
shift
echo 现在第一个是:%1(原第二个)
每执行一次 shift,%2 变成 %1,%3 变成 %2,以此类推。这样就能遍历更多参数。