中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-04 21:27
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 各位高手.我实在无法理理解批处理中%0-9的作用 查看 1,147 回复 7
楼 主 各位高手.我实在无法理理解批处理中%0-9的作用 发表于 2009-12-12 13:55 ·  中国 广东 广州 电信
新手上路
积分 5
发帖 2
注册 2009-12-12 00:46
16年会员
UID 156404
性别 男
状态 离线
搜到很多批处理的教程,但都千篇一律!
看到%号的作用就看不懂了.
说%是一个参数什么的,能代替什么.
实在看不懂.这问题很弱智,也许大家都懂.但我实在无法理解,也找不了相应的资料,小弟第一次在这个论坛发帖求助,希望有大侠能帮我解释一下%号的作用
2 发表于 2009-12-13 19:44 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
http://www.bathome.cn/viewthread.php?tid=2782#pid22365
%0代表批处理文件本身,%1代表第一个参数,%2代表第二个参数,依此类推。如果仍有疑问,可参考批处理基础教程。

假设批处理C:\test.bat内容如下
@echo off
echo %0 %1 %2

你可以在命令行窗口中执行
C:\test.bat hello_1 hello_2

将会得到结果:
test.bat hello_1 hello_2
3 发表于 2009-12-14 11:38 ·  中国 甘肃 武威 电信
初级用户
积分 50
发帖 26
注册 2009-12-04 09:53
16年会员
UID 155891
性别 男
状态 离线
对于新手来说,开始一切都是复杂的
4 发表于 2009-12-15 11:53 ·  中国 河北 石家庄 联通
初级用户
积分 31
发帖 13
注册 2009-06-26 07:52
17年会员
UID 148182
性别 男
状态 离线
http://blog.csdn.net/craigyang/archive/2009/09/17/4561173.aspx
具体的意思看上面的地址我们共同学习!
%0 这个有点特殊,有几层意思,先讲%1-%9的意思.

%1 返回批处理的第一个参数
%2 返回批处理的第二个参数
%3-%9依此推类

反回批处理参数?到底怎么个返回法?

我们看这个例子,把下面的代码保存为test.BAT然后放到C盘下

@echo off
echo %1 %2 %3 %4
echo %1
echo %2
echo %3
echo %4

进入CMD,输入cd c:\
然后输入 test.bat 我是第一个参数 我是第二个参数 我是第三个参数 我是第四个参数

注意中间的空额,我们会看到这样的结果:

我是第一个参数 我是第二个参数 我是第三个参数 我是第四个参数
我是第一个参数
我是第二个参数
我是第三个参数
我是第四个参数

对比下代码,%1就是我是第一个参数 %2就是我是第二个参数
怎么样理解了吧!


这些%1和%9可以让批处理也能带参数运行,大大提高批处理功能!



还有一个%* 他是什么呢?他的作用不是很大,只是返回参数而已,不过他是一次返回全部参数

的值,不用在输入%1 %2来确定一个个的


例子
@echo off
echo %*

同样保存为test.bat 放到C盘
进入CMD,输入cd c:\
然后输入 test.bat 我是第一个参数 我是第二个参数 我是第三个参数 我是第四个参数

可以看到他一次把全部参数都显示出来了


@echo off

for %%i in (%*) do echo %%i

做一个循环,也是将%1-%9的参数全部显示出来




好现在开始讲那个比较特殊的%0


%0 这个不是返回参数的值了,他有两层意思!

第一层意思:返回批处理所在绝对路径

例子:
@echo off
echo %0
pause

保存为test.BAT放在桌面运行,会显示如下结果
"C:\Documents and Settings\Administrator\桌面\test.bat"

他把当前批处理执行的所在路经打印出来了,这就是返回批处理所在绝对路径的意思

第二层意思:无限循环执行BAT

例子:
@echo off
net user
%0

保存为BAT执行,他就会无限循环执行net user这条命令,直到你手动停止.

以上就是批处理中的一些系统变量,另外还有一些变量,他们也表示一些功能,
FOR命令中的那些就是,FOR变量已经说过,就不讲了.
5 发表于 2010-02-05 15:40 ·  中国 浙江 杭州 网易云BGP数据中心
新手上路
积分 19
发帖 10
注册 2010-02-04 15:36
16年会员
UID 160101
性别 女
状态 离线
原来如此,,,谢谢你的指点
6 发表于 2010-02-08 00:49 ·  中国 河北 唐山 联通
新手上路
积分 2
发帖 1
注册 2010-02-06 19:23
16年会员
UID 160235
性别 男
状态 离线
看不懂啊
7 发表于 2010-02-08 09:39 ·  中国 湖南 湘潭 电信
初级用户
积分 23
发帖 19
注册 2009-07-10 07:01
17年会员
UID 149125
性别 男
状态 离线
批处理可以从cmd中运行。从cmd中运行时,可以附带参数运行,如bat.bat a,其中bat.bat是批处理文件名,a就是一个参数。那么在bat.bat中,又如何表示这个参数呢?这里就用到%1~%9。%1就是第一个参数,以此类推。上例中的批处理文件中的%1就是a。

[ Last edited by sysplay on 2010-2-8 at 09:41 ]
8 发表于 2010-02-12 15:38 ·  中国 江苏 镇江 电信
初级用户
★★
积分 147
发帖 131
注册 2008-09-22 23:54
17年会员
UID 126352
性别 男
状态 离线
int main(int argc,char *argv[]) //char *argv[] 接收cmd的启动参数
{
if(argc==1) puts("error");
else
puts("argv[1]");
return 0:
}

%1 %2... 就相当于函数对传入函数内部的参数的引用,这里就相当于 argv[1]....

for /f "delims=" %%i in (*.txt) do call :work %%~nxi

pause>nul

:work

for /f "delims=" %%j in (‘findstr "string" %1) do (
echo %%j
)

goto :eof

这里%1 就是对call传入参数%%~nxi(传入的文件名+扩展名)的直接引用
freedom!
论坛跳转: