Cmd 为什么SHIFT不改变值?

Cmd 为什么SHIFT不改变值?,cmd,Cmd,轮班似乎不起作用,或者我不明白。这是我正在努力制作的剧本 C:>type shiftit.bat @echo off echo all is %* echo 0 is %0 echo 5 is %5 shift /5 echo shifted by 5 echo 0 is %0 echo 1 is %1 echo 2 is %2 然而,我本以为在移位之后,%1将包含“5”或“6”。事实并非如此。似乎SHIFT/5命令无效。我错过了什么 12:57:25.78 C:\src\t C:&g

轮班似乎不起作用,或者我不明白。这是我正在努力制作的剧本

C:>type shiftit.bat
@echo off
echo all is %*
echo 0 is %0
echo 5 is %5
shift /5
echo shifted by 5
echo 0 is %0
echo 1 is %1
echo 2 is %2
然而,我本以为在移位之后,%1将包含“5”或“6”。事实并非如此。似乎
SHIFT/5
命令无效。我错过了什么

12:57:25.78  C:\src\t
C:>cmd /E:ON
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

12:57:29.57  C:\src\t
C:>shiftit.bat 1 2 3 4 5 6 7 8 9
all is 1 2 3 4 5 6 7 8 9
0 is shiftit.bat
5 is 5
shifted by 5
0 is shiftit.bat
1 is 1
2 is 2

你不明白,对吧, shift/5将删除参数%5,因此%6变为%5、%7->%6等

要删除%1..%5您必须换班5次。
allargs%*不受移位的影响

请参阅更改的批次

:: shiftit.bat 1 2 3 4 5 6 7 8 9
@echo off
echo all is %*
Echo %%1 IS %1
Echo %%2 IS %2
Echo %%3 IS %3
Echo %%4 IS %4
Echo %%5 IS %5
Echo %%6 IS %6
Echo %%7 IS %7
Echo %%8 IS %8
Echo %%9 IS %9
shift /5
echo shifted by 5

echo all is %*
Echo %%1 IS %1
Echo %%2 IS %2
Echo %%3 IS %3
Echo %%4 IS %4
Echo %%5 IS %5
Echo %%6 IS %6
Echo %%7 IS %7
Echo %%8 IS %8
Echo %%9 IS %9
和样本输出:

> shiftit.bat 1 2 3 4 5 6 7 8 9
all is 1 2 3 4 5 6 7 8 9
%1 IS 1
%2 IS 2
%3 IS 3
%4 IS 4
%5 IS 5
%6 IS 6
%7 IS 7
%8 IS 8
%9 IS 9
shifted by 5
all is 1 2 3 4 5 6 7 8 9
%1 IS 1
%2 IS 2
%3 IS 3
%4 IS 4
%5 IS 6
%6 IS 7
%7 IS 8
%8 IS 9
%9 IS

这是绝对正确的。在不使用参数编号或使用参数编号的情况下,使用SHIFT命令一次或多次时,
%*
不会发生更改,这确实是经常发生的意外情况。SHIFT仅影响编号的参数引用,即不带或带有由编写的修饰符的
%1
%2
%3
,但并非所有参数都引用
%*
。微软的命令文档清楚地记录了这一点。