中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]关于shift的问题:第10个参数%10无法正确传递
作者:
标题: [已结]关于shift的问题:第10个参数%10无法正确传递 上一主题 | 下一主题
tempuser
高级用户





积分 547
发帖 261
注册 2006-4-15
状态 离线
『楼 主』:  [已结]关于shift的问题:第10个参数%10无法正确传递

test.bat文件内容如下:
@echo off 
echo %1
echo %2
...
echo %9
echo %10
cmd下执行 test.bat 1 2 3 4 5 6 7 8 9 10 执行结果是:1 2 3 4 5 6 7 8 9 10(当然是立着显示的) 问题1:不是说没有%10这样的参数吗?可是%10确实传递了呀! 修改test.bat如下
@echo off 
echo %1
echo %2
...
echo %9
shift
echo %10
cmd下执行 test.bat 1 2 3 4 5 6 7 8 9 10 执行结果是:1 2 3 4 5 6 7 8 9 20 问题:20是怎么出来的呢? 我的理解是: %1 %2 %3 %4 %5 %6 %7 %8 %9 %10 1 2 3 4 5 6 7 8 9 10 执行到 echo %9 显示是:1 2 3 4 5 6 7 8 9 没有问题! 到了执行shift,应该是这样的 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11 1 2 3 4 5 6 7 8 9 10 那么echo %10显示的应该是9而不是20啊!到这我弄不清了! ───────────────── 版务记录 ───────────────── 执行:HAT 操作:[2008-12-10]在帖子标题中增加搜索关键字;代码加code标签 说明:原标题"[求助]关于shift的问题"不利于论坛搜索 处罚:扣除2点积分 提示:建议阅读以下帖子 {1415}提问的智慧 {7326}论坛新手必读,所有人的基本行为准则 {22703}请不要做浮躁的人 {32667}[愤怒]那些连标题都写不清楚的人们啊,你们醒醒吧 {32825}本版严厉整顿烂帖 ───────────────── 版务记录 ───────────────── [ Last edited by HAT on 2008-12-11 at 11:16 ]


   此帖被 -2 点积分    点击查看详情   
评分人:【 HAT 分数: -2  时间:2008-12-10 18:12


2008-12-10 14:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 2 楼』:  

Originally posted by tempuser at 2008-12-10 02:38 PM: test.bat文件内容如下: @echo off echo %1 echo %2 ... echo %9 echo %10 cmd下执行 test.bat 1 2 3 4 5 6 7 8 9 10 执行结果是:1 2 3 4 5 6 7 8 9 10(当然是立着显示的) 问 ...
第一种情况: echo %10实际是输出%1和0。 第二种情况: echo %10实际是输出%2和0。


   此帖被 +9 点积分       点击查看详情   
评分人:【 moniuming 分数: +9  时间:2008-12-10 15:47


2008-12-10 15:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tempuser
高级用户





积分 547
发帖 261
注册 2006-4-15
状态 离线
『第 3 楼』:  

Originally posted by s11ss at 2008-12-10 15:08: 第一种情况: echo %10实际是输出%1和0。 第二种情况: echo %10实际是输出%2和0。
能讲讲为什么吗?光看结果看不懂.


2008-12-10 18:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 4 楼』:  

只要把 test.bat 1 2 3 4 5 6 7 8 9 10 换成 test.bat a b c d e f g h i j 就很明了了。




┌───────┐ ├→学习→实践→┤ └───────┘
2008-12-10 18:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 5 楼』:  

就是没有%10。 %10被看作%1和0,如果你把0改成a,那结果就分别是1a和2a。 另外,第二种情况下,由于执行了shift,会将 %1 移位到 %0,将 %2 移位到 %1,等等 [ Last edited by s11ss on 2008-12-10 at 18:48 ]


2008-12-10 18:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 6 楼』:  

每执行一次 shift,就会将所有参数的值向左移一位。即 —— %1 的值赋给 %0,%2 的值赋给 %1,%3 的值赋给 %2... ... 例,SHIFT2.bat 的内容是:
@echo off
echo "%0" "%1"
shift
echo "%0" "%1"
shift
echo "%0" "%1"
执行:
C:\>SHIFT2.bat 1 2 "SHIFT2.bat" "1" "1" "2" "2" ""
从中可以看出,空值也会向左移动。利用这点,可以用 shift 计算拖入了多少个文件到批处理中:
@echo off
:loop
shift
if "%~0" neq "" set /a "n+=1" & goto loop
echo 拖入了 %n% 个文件。
pause
此外,还有一个用法:
C:\>shift /? 更改批处理文件中可替换参数的位置。 SHIFT [/n] 如果命令扩展名被启用,SHIFT 命令支持/n 命令行开关;该命令行开关告诉 命令从第 n 个参数开始移位;n 介于零和八之间。例如: SHIFT /2 会将 %3 移位到 %2,将 %4 移位到 %3,等等;并且不影响 %0 和 %1。


   此帖被 +1 点积分    点击查看详情   
评分人:【 Helloworld 分数: +1  时间:2008-12-10 18:58


2008-12-10 18:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 7 楼』:  

Originally posted by tireless at 2008-12-10 06:46 PM: 每执行一次 shift,就会将所有参数的值向左移一位。即 —— %1 的值赋给 %0,%2 的值赋给 %1,%3 的值赋给 %2... ... 例,SHIFT2.bat 的内容是: [code]@ec ...
执行shift就相当于执行shift /0


   此帖被 +1 点积分    点击查看详情   
评分人:【 tireless 分数: +1  时间:2008-12-10 18:55


2008-12-10 18:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tempuser
高级用户





积分 547
发帖 261
注册 2006-4-15
状态 离线
『第 8 楼』:  

谢谢!只是理解了shift的表面意思,还得多实践呀!


2008-12-11 08:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: