返回列表 发新帖

[分享] 批处理文件中%1~9是什么意思?

[复制链接]
发表在  2014-3-3 17:36:26  | 显示全部楼层 | 阅读模式
本帖最后由 zyfsky 于 2014-3-3 17:37 编辑


%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。
例1:C:根目录下有一批处理文件名为f.bat,内容为:
@echo off
format %1

如果执行C:\>f a:
那么在执行f.bat时,%1就表示a:,这样format %1就相当于format a:,于是上面的命令运行时实际执行的是format a:

例2:C:根目录下一批处理文件名为t.bat,内容为:
@echo off
type %1
type %2

那么运行C:\>t a.txt b.txt
%1 : 表示a.txt
%2 : 表示b.txt
于是上面的命令将顺序地显示a.txt和b.txt文件的内容。

==== willsort 编注 ===============
参数在批处理中也作为变量处理, 所以同样使用百分号作为引导符, 其后跟0-9中的一个数字构成参数引用符. 引用符和参数之间 (例如上文中的 %1 与 a: ) 的关系类似于变量指针与变量值的关系. 当我们要引用第十一个或更多个参数时, 就必须移动DOS 的参数起始指针. shift 命令正充当了这个移动指针的角色, 它将参数的起始指针移动到下一个参数, 类似C 语言中的指针操作. 图示如下:

初始状态, cmd 为命令名, 可以用 %0 引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9

经过1次shift后, cmd 将无法被引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9

经过2次shift后, arg1也被废弃, %9指向为空, 没有引用意义
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8

遗憾的是, win9x和DOS下均不支持 shift 的逆操作. 只有在 nt 内核命令行环境下, shift 才支持 /n 参数, 可以以第一参数为基准返复移动起始指针.
发表于 2014-3-3 17:38:36  | 显示全部楼层
@echo off
call :slz a c b d e f g h
echo call某标签传递8个参数,理解了吗?
pause&exit
:slz
echo 参数1 %1
echo 参数2 %2
echo 参数3 %3
echo 参数4 %4
echo 参数5 %5
echo 参数6 %6
echo 参数7 %7
echo 全部参数 %*

类似长见另一种
test.bat a c b d e f g h

test.bat内容
echo 显示自己 %0
echo 参数1 %1
echo 参数2 %2
echo 参数3 %3
echo 参数4 %4
echo 参数5 %5
echo 参数6 %6
echo 参数7 %7
echo 全部参数 %*
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 马上加入

本版积分规则