中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-07 12:11
48,040 主题排行 / 350,125 发帖 / 今日 0 篇 / 48,252 会员排行
DOS批处理 & 脚本技术(批处理室) » 请教 shift 命令的详细解释
可打印版本  1,137 / 7
第1楼 seven 发表于 2007-06-27 16:23
新手上路 发帖 5 积分 12
请教 shift 命令的详细解释
批处理文件下比较难看懂的就数参数问题了,而再加上shift这么一掺乎更加有点难懂了饿。所以请高手指点指点。
最好可以通过一个比较经典的例子来讲解一下阿。因为关于帮助里面关于shift的介绍似乎太理论化了,比较难懂。

等待各位高手指点,谢谢:P

[ Last edited by bjsh on 2007-7-31 at 10:47 AM ]
第2楼 zh159 发表于 2007-06-27 16:36
金牌会员 发帖 1,467 积分 3,687
自己在命令行下试一下test.bat 1 2 3 4 5 6 7 8 9 0

test.bat
第3楼 seven 发表于 2007-06-27 16:53
新手上路 发帖 5 积分 12
我了解你的意思,也就是说当切换到shift命令时,
参数赋予了%0 (也就是bat本身)继续运行。这
个循环玩得比较经典 :lol:

再搞个比较复杂点的来see see ... :D
谢谢
第4楼 zh159 发表于 2007-06-27 19:35
金牌会员 发帖 1,467 积分 3,687
shift就是这样用的,没什么比较复杂的,用到才想的出来,没用到想破脑袋也see see ...不了

参数不是赋予了%0,而是从后面往前面往前面移位或者设定从第 n 个参数开始移位
第5楼 seven 发表于 2007-06-28 10:04
新手上路 发帖 5 积分 12
你也在忧郁蓝色手机论坛混得啊~~
哈哈,世界是小的~~
第6楼 jun19841 发表于 2007-10-17 14:16
初级用户 发帖 29 积分 55 来自 亚洲
N X ~ 经典~!!
第7楼 jun19841 发表于 2007-10-17 15:41
初级用户 发帖 29 积分 55 来自 亚洲
借题发挥一下
@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直接完成这个循环~!
第8楼 pinghu 发表于 2008-02-08 22:36
中级用户 发帖 130 积分 307
一些初学者朋友对于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
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023