中国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
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: