%[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
参数,
可以以第一参数为基准返复移动起始指针.
%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。
例1:C:根目录下有一批处理文件名为fmt.bat,内容为:
@echo off
format %1
如果执行C:\>f d:
那么在执行fmt.bat时,%1就表示d:,这样format %1就相当于format d:,于是上面的命令运行时实际执行的是format d:
是命令行的参数的引用,可以再批处理里得到命令行的参数
例如
command -s -a
%0就是command本身
%1就是-s
%2就是-a
再例如,
xcopy.exe f:\windows\a.txt d:\
这里面的
%0就是xcopy.exe本身
%1就是f:\windows\a.txt
%2就是d:\
还有扩展。
%~f1就是f:\windows\a.txt
%~d1就是“f:”
%~p1就是“\windows\”
%~n1就是“a”
%~x1就是“.txt”
%~s1就是没有空格的路径
%~a1文件属性
%~t1文件创建时间
%~z1文件大小
扩展的用法
~I - 删除任何引号("),扩充 %I
%~fI - 将 %I 扩充到一个完全合格的路径名
%~dI - 仅将 %I 扩充到一个驱动器号
%~pI - 仅将 %I 扩充到一个路径
%~nI - 仅将 %I 扩充到一个文件名
%~xI - 仅将 %I 扩充到一个文件扩展名
%~sI - 扩充的路径只含有短名
%~aI - 将 %I 扩充到文件的文件属性
%~tI - 将 %I 扩充到文件的日期/时间
%~zI - 将 %I 扩充到文件的大小
是命令行的参数的引用,可以再批处理里得到命令行的参数
例如
command -s -a
%1就是-s
%2就是-a