中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-05 01:02
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请帮忙解释这个代码中形式参数的含义 查看 894 回复 10
楼 主 请帮忙解释这个代码中形式参数的含义 发表于 2007-06-19 09:26 ·  中国 江苏 苏州 中移铁通
初级用户
★★
积分 144
发帖 66
注册 2006-11-30 00:37
19年会员
UID 72121
性别 男
状态 离线
有这样一个程序:
1. @echo off
2. if not "%2"=="" goto _subru
3. for %%i in (0 1 2 3 4 5 6 7 8 9) do call %0 %1 %%i
4. goto _out
5. :_subru
6. set x_=%1%2
7. if "%x_%"=="00" goto _out
8. echo %x_%
9. :_out
10. pause


有这样几个问题:
1) 第二行中的“%2”是什么意思?有什么作用?
2) 每三行中的call及后面的%0 %1是什么意思?再者,后面为什么还要跟一个“%%i”
3) 程序的运行路线是怎么走的?

这是一个依次显示数字的程序,从01-99依次显过。(别人写的,忘了是哪个了。。。)
这是我想了一天都没有想明白有程序,另外还查看了本坛的某些帖子,看不很懂,我想哪位达人能抽空儿,给非常详细的说一下,或帖出由你收集到的想关的帖子也好,谢谢!

[ Last edited by bjsh on 2007-7-31 at 02:21 PM ]
2 发表于 2007-06-19 10:06 ·  中国 江苏 苏州 中移铁通
初级用户
★★
积分 144
发帖 66
注册 2006-11-30 00:37
19年会员
UID 72121
性别 男
状态 离线
看来这次别想在线时学会了。。。
有没有人啊O=C
3 发表于 2007-06-19 11:30 ·  中国 湖北 潜江 电信
高级用户
★★★
积分 894
发帖 411
注册 2007-02-17 12:15
19年会员
UID 79697
性别 男
状态 离线
多看看帮助, 别问没水准的问题!
@set c= 不知则觉多,知则觉少,越知越多,便觉越来越少. --- 知多少.
@for,/l,%%i,in,(1,1,55)do,@call,set/p=%%c:~%%i,1%%<nul&ping/n 1 127.1>nul


4 发表于 2007-06-19 11:32 ·  中国 河北 石家庄 北京神州长城通信技术发展中心中国长城互联网
初级用户
★★
积分 152
发帖 75
注册 2007-02-06 22:09
19年会员
UID 78805
性别 男
状态 离线
都是些很基础的问题。。。我也是初学者,lz多看看命令行的帮助,可以获得答案的~
5 发表于 2007-06-19 11:52 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
//1) 第二行中的“%2”是什么意思?有什么作用?
%2代表第二个参数,作用是判断运行这个批处理时输入的第二个参数是否为空。

//2) 每三行中的call及后面的%0 %1是什么意思?再者,后面为什么还要跟一个“%%i”
%0代表这个批处理本身,%1代表第一个参数,for循环中使用变量时应该用两个%,比如%%i

//3) 程序的运行路线是怎么走的?
假设这个批处理的名字为test.bat
你分别用以下三种方法运行:
test.bat
test.bat 1
test.bat 2 3
这样你就知道运行路线是怎么走的了
6 回以上楼 发表于 2007-06-19 12:46 ·  中国 江苏 苏州 中移铁通
初级用户
★★
积分 144
发帖 66
注册 2006-11-30 00:37
19年会员
UID 72121
性别 男
状态 离线
回五楼
1,“//1) 第二行中的“%2”是什么意思?有什么作用?
%2代表第二个参数”请问这第二个参数是指的哪个命令,现在头都大了,分不清哪个是哪个了。。
2, 我也知道(只是单单知道这个概念而已)%0是代表这个P处理本身,%1是代表第一个参数,但在这个里面(甚至任何一个程序)具体代表哪个,[或许这个一个语文题]。
3,“for循环中使用变量时应该用两个%,比如%%i“这好像不是我说的那个意思,可能是我没有表述清楚,我是说为什么有了“%1”这个参数,还要再跟个“%%i"
4, 运行了下HAT兄说的方法,不知道“test.bat 2 3”是为了简写而写在一起的,还是原本就应这样写,我把
@echo off
test.bat 2 3
写入到一个P处理中,运行不通!
因为一直不明白这些参数问题,看了N个帖子,依就是“型是而非”。还望一一细说。

另回3楼:就是看了不明白才会发问,并非故意开炮。看了几个帖子都是与基础有些间离,如果兄有细帖,还望不吝指出!
7 发表于 2007-06-19 13:11 ·  中国 河北 石家庄 北京神州长城通信技术发展中心中国长城互联网
初级用户
★★
积分 152
发帖 75
注册 2007-02-06 22:09
19年会员
UID 78805
性别 男
状态 离线
test.bat 2 3
test.bat=%0
2=%1
3=%2

至于%%i,取的是(0 1 2 3 4 5 6 7 8 9)里的值。

楼上让你尝试test.bat 2 3,你直接运行当然没这个了。。。你得把你主楼的程序创建为test.bat啊...
建议lz不妨多一点探索精神,多动手,多读程序。感觉这东西就是潜移默化的。

其实我接触批处理也就一个星期:)

[ Last edited by zasxcdfv on 2007-6-19 at 01:21 PM ]
8 回七楼 发表于 2007-06-19 13:25 ·  中国 江苏 苏州 中移铁通
初级用户
★★
积分 144
发帖 66
注册 2006-11-30 00:37
19年会员
UID 72121
性别 男
状态 离线
我已经把(主程序)保存成test.bat了。
你是说test.bat 2 3中的
2=%1
3=%2
这我清楚,不明白的是%1和%2对应(主程序)里的哪部分?
9 发表于 2007-06-19 13:28 ·  中国 河北 石家庄 北京神州长城通信技术发展中心中国长城互联网
初级用户
★★
积分 152
发帖 75
注册 2007-02-06 22:09
19年会员
UID 78805
性别 男
状态 离线
你执行了test.bat 2 3后,
程序中的%1就是2了,%2就是3。
%0就是"test.bat”这个字符串(就是命令本身)
然后你把它们代进去看一下程序的流程就明白了。
10 发表于 2007-06-19 13:34 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
我已经把(主程序)保存成test.bat了。
你是说test.bat 2 3中的
2=%1
3=%2
这我清楚,不明白的是%1和%2对应(主程序)里的哪部分?
=============================
把test.bat保存到C:\
开始-运行-cmd
在弹出的msdos窗口中输入C:\test.bat 2 3
回车看结果
11 回10楼 发表于 2007-06-19 14:25 ·  中国 江苏 苏州 中移铁通
初级用户
★★
积分 144
发帖 66
注册 2006-11-30 00:37
19年会员
UID 72121
性别 男
状态 离线
结果是23。结果怎么是23呢?
那句"call %0 %1 %%i“也就应该等同于上面的test.bat 2 3了吧,
=============
但那是指明了test.bat后面有2和3这两个参数时也就很好明白了。
后面的第一个数=====%1
后面的第二个数=====%2
.
.
=============
但就像这个"call %0 %1 %%i“,
%0什么时候都是指本身没有错,也就是像上面的test.bat一样,
可这个%1是指什么呢,没有对应的呀,是“(0 1 2 3 4 5 6 7 8 9)”中的第一个吗?
不清楚了,只是知道“(0 1 2 3 4 5 6 7 8 9)”在第一个循环时"%%i"=="0"
那好了,现在%0清楚了,%%i会在循环时对应0,1,2。。。
可这个%1呢,难道说是这样:
在第一次循环伊始,"call %0 %1 %%i"=="call %0 %%i"??
论坛跳转: