windows批处理通过%0-%9访问参数,%0为脚本路径,%1-%9为前9个参数,超9个需用shift移位;含空格或特殊字符的参数必须用英文双引号包裹,引用时可用%~1去引号。
windows 批处理脚本通过 %1 到 %9 直接访问前 9 个命令行参数,%0 是脚本自身路径名;超过 9 个需用 shift 移位处理,含空格或特殊字符的参数必须用英文双引号包裹。
基础参数引用:%1 ~ %9
批处理中每个位置参数用百分号加数字表示: - %0 → 当前脚本文件名(含路径) - %1 → 第一个参数,%2 → 第二个,依此类推,最多到 %9 - 若未传对应参数,%n 会扩展为空字符串,不报错
- 示例脚本 hello.bat:
@echo off
echo 脚本名:%0
echo 第一个参数:%1
echo 第二个参数:%2
- 运行
hello.bat "张三" 25,输出:
脚本名:hello.bat
第一个参数:张三
第二个参数:25
含空格/特殊字符的参数必须加引号
cmd 解析空格为参数分隔符,所以带空格的值(如路径、人名)必须整体用英文双引号包围,否则会被截断:
- 正确写法:
backup.bat "C:\My Documents" "2024-07" - 错误写法:
backup.bat C:\My Documents "2024-07"→ 实际传入三个参数:C:\My、Documents、"2024-07" - 脚本内直接使用 %1 和 %2 即可,引号不会被自动剥离(若需去引号可用
%~1)
处理 10 个及以上参数:用 shift 循环移位
%1–%9 是固定位置变量,超出部分无法直接引用。shift 命令将所有参数左移一位(%2→%1,%3→%2…),原 %1 被丢弃,新 %1 就是原来的 %2 —— 可配合循环遍历全部参数:
- 简单遍历示例:
@echo off
:loop
if [%1] == [] goto end
echo 参数:%1
shift
goto loop
:end
- 运行
test.bat a b c d e f g h i j k,将依次输出 a 到 k - 注意:shift 不影响 %0;每执行一次,%1 被覆盖,原 %1 不再可访问
判断参数是否存在与默认值处理
常用方式是检查 %1 是否为空,避免后续操作出错:
- 基础判断:
if [%1] == [] ( echo 缺少必要参数 & exit /b )
- 提供默认值(模拟):
if [%1] == [] ( set name=Guest ) else ( set name=%1 )
echo 用户名:%name%
- 也可结合 set /p 提示用户输入补全(适合交互式脚本)











