标题: [已结]关于shift的问题:第10个参数%10无法正确传递
[打印本页]
作者: tempuser
时间: 2008-12-10 14:38
标题: [已结]关于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 ]
作者: s11ss
时间: 2008-12-10 15:08
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。
作者: tempuser
时间: 2008-12-10 18:07
Originally posted by s11ss at 2008-12-10 15:08:
第一种情况:
echo %10实际是输出%1和0。
第二种情况:
echo %10实际是输出%2和0。
能讲讲为什么吗?光看结果看不懂.
作者: wxcute
时间: 2008-12-10 18:38
只要把
test.bat 1 2 3 4 5 6 7 8 9 10
换成
test.bat a b c d e f g h i j
就很明了了。
作者: s11ss
时间: 2008-12-10 18:39
就是没有%10。
%10被看作%1和0,如果你把0改成a,那结果就分别是1a和2a。
另外,第二种情况下,由于执行了shift,会将 %1 移位到 %0,将 %2 移位到 %1,等等
[ Last edited by s11ss on 2008-12-10 at 18:48 ]
作者: tireless
时间: 2008-12-10 18:46
每执行一次 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。
作者: s11ss
时间: 2008-12-10 18:49
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
作者: tempuser
时间: 2008-12-11 08:27
谢谢!只是理解了shift的表面意思,还得多实践呀!