中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: 请教 shift 命令的详细解释 上一主题 | 下一主题
seven
新手上路




积分 12
发帖 5
注册 2007-6-25
状态 离线
『楼 主』:  请教 shift 命令的详细解释

批处理文件下比较难看懂的就数参数问题了,而再加上shift这么一掺乎更加有点难懂了饿。所以请高手指点指点。 最好可以通过一个比较经典的例子来讲解一下阿。因为关于帮助里面关于shift的介绍似乎太理论化了,比较难懂。 等待各位高手指点,谢谢:P [ Last edited by bjsh on 2007-7-31 at 10:47 AM ]




挺起不屈的脊樑 - 意志 信心 勇氣
2007-6-27 16:23
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 2 楼』:  

自己在命令行下试一下test.bat 1 2 3 4 5 6 7 8 9 0 test.bat
@echo off

:loop
cls
echo %1
echo.
pause
shift
goto :loop




2007-6-27 16:36
查看资料  发短消息  网志   编辑帖子  回复  引用回复
seven
新手上路




积分 12
发帖 5
注册 2007-6-25
状态 离线
『第 3 楼』:  

我了解你的意思,也就是说当切换到shift命令时, 参数赋予了%0 (也就是bat本身)继续运行。这 个循环玩得比较经典 :lol: 再搞个比较复杂点的来see see ... :D 谢谢




挺起不屈的脊樑 - 意志 信心 勇氣
2007-6-27 16:53
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 4 楼』:  

shift就是这样用的,没什么比较复杂的,用到才想的出来,没用到想破脑袋也see see ...不了 参数不是赋予了%0,而是从后面往前面往前面移位或者设定从第 n 个参数开始移位




2007-6-27 19:35
查看资料  发短消息  网志   编辑帖子  回复  引用回复
seven
新手上路




积分 12
发帖 5
注册 2007-6-25
状态 离线
『第 5 楼』:  

你也在忧郁蓝色手机论坛混得啊~~ 哈哈,世界是小的~~




挺起不屈的脊樑 - 意志 信心 勇氣
2007-6-28 10:04
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
jun19841
初级用户





积分 55
发帖 29
注册 2006-4-11
来自 亚洲
状态 离线
『第 6 楼』:  

N X ~ 经典~!!


2007-10-17 14:16
查看资料  发送邮件  访问主页  发短消息  网志  OICQ (251101015)  编辑帖子  回复  引用回复
jun19841
初级用户





积分 55
发帖 29
注册 2006-4-11
来自 亚洲
状态 离线
『第 7 楼』:  借题发挥一下

@echo off set Num=1 2 3 4 5 6 7 8 9 echo @echo off >>u.bat echo set Num=%%1 >>u.bat echo :loop >>u.bat echo echo %%1 >>u.bat echo echo. >>u.bat echo pause >>u.bat echo shift >>u.bat echo goto loop >>u.bat call u.bat %Num% pause 只能 通过CALL 来完成,麻烦哪位 牛 插 的 ……出来亮亮相哦!! 不用call直接完成这个循环~!


2007-10-17 15:41
查看资料  发送邮件  访问主页  发短消息  网志  OICQ (251101015)  编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 8 楼』:  

一些初学者朋友对于shift命令感到非常的困惑,抱怨网上的一些shift命令教程很难理解。为了解决这个问题,于是我就写了一下这个 “超生游击队”教程以供初学者朋友参考。 言归正传,比如我老爸有10个儿子,我英雄是第10个。 第一步: 我们现在用一个另类的办法输出10个儿子的名字,将如下代码保存为hero.bat。 @echo off echo %1 echo %2 echo %3 echo %4 echo %5 echo %6 echo %7 echo %8 echo %9 echo %10 pause 如何运行呢?我们可以另写一个bat,内容是:call hero.bat 老大 老二 老三 …… 英雄 也就是调用hero.bat并共带10个参数! 能正确运行吗?不能,很遗憾,因为根本没有%10。 第二步: 在上一步中没有输出我英雄的大名,那难道我英雄就不是我老爸的儿子吗!我得想个办法把我的名字也输出来。 好了,借助shift命令就可以达到。我们把hero.bat中的代码改一下。 @echo off echo %1 echo %2 echo %3 echo %4 echo %5 echo %6 echo %7 echo %8 echo %9 shift echo %9 pause 终于我的大名输出了。可是英雄明明是第10个参数呀,怎么现在变成第9个了? 这个就是shift的功能. 也就是,执行shift命令以后,原来的%9变成了%8,原来的%8变成了%7,原来的%7变成了%6……而原来的%1变成了%0,此时原来的%0没了。 也就是说后面的参数依次冲掉了前面的参数,而为了输出我的名字,最终牺牲了%0。 第三步: 我老爸又认了4个干儿子,名字分别为a,b,c,d 到此,我老爸有多了4个干儿子。共14个儿子。 在调用hero.bat时又多了4个参数,则运行hero.bat时有:call hero.bat 老大 老二 老三 …… 英雄 a b c d (注意:要把省略号换成名字。) 此时,hero.bat的代码如下:(最容易理解的方法) @echo off echo %1 echo %2 echo %3 echo %4 echo %5 echo %6 echo %7 echo %8 echo %9 shift echo %9 ::现在的%9是英雄 shift echo %9 ::现在的%9是a shift echo %9 ::现在的%9是b shift echo %9 ::现在的%9是c shift echo %9 ::现在的%9是d pause


2008-2-8 22:36
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

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


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



论坛跳转: