中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 各位高手.我实在无法理理解批处理中%0-9的作用
作者:
标题: 各位高手.我实在无法理理解批处理中%0-9的作用 上一主题 | 下一主题
312699929
新手上路





积分 5
发帖 2
注册 2009-12-12
状态 离线
『楼 主』:  各位高手.我实在无法理理解批处理中%0-9的作用

搜到很多批处理的教程,但都千篇一律!
看到%号的作用就看不懂了.
说%是一个参数什么的,能代替什么.
实在看不懂.这问题很弱智,也许大家都懂.但我实在无法理解,也找不了相应的资料,小弟第一次在这个论坛发帖求助,希望有大侠能帮我解释一下%号的作用

2009-12-12 13:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  

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



2009-12-13 19:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
caimingbing
初级用户





积分 50
发帖 26
注册 2009-12-4
状态 离线
『第 3 楼』:  

对于新手来说,开始一切都是复杂的

2009-12-14 11:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zmycgh
初级用户





积分 31
发帖 13
注册 2009-6-26
状态 离线
『第 4 楼』:  

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变量已经说过,就不讲了.

2009-12-15 11:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
nms
新手上路





积分 19
发帖 10
注册 2010-2-4
状态 离线
『第 5 楼』:  

原来如此,,,谢谢你的指点

2010-2-5 15:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hbtsjy
新手上路





积分 2
发帖 1
注册 2010-2-6
状态 离线
『第 6 楼』:  

看不懂啊

2010-2-8 00:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sysplay
初级用户





积分 23
发帖 19
注册 2009-7-10
状态 离线
『第 7 楼』:  

批处理可以从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 ]

2010-2-8 09:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
rs369007
初级用户





积分 147
发帖 131
注册 2008-9-22
状态 离线
『第 8 楼』:  

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!
2010-2-12 15:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: