2013-04-08 161 views
9

我试图在整个屏幕上显示最多9个参数, ,然后在每一行后面显示一个,直到没有剩下的一行。使用批处理文件SHIFT命令

我尝试这样做:

@echo off 
echo %* 
shift 
echo %* 
shift 
echo %* 

实际结果:

a b c d e f 
    a b c d e f 

预期结果:

A B C D E F 
B C D E F 
C D E F 
D E F 
E F 
F 

任何帮助吗?

谢谢。

+0

@大卫感谢您的指示,我现在明白了。非常感谢。 ECHO%1%2%3%4%5%6%7%8%9 移 ECHO%1%2%3%4%5%6%7%8%9 移 ECHO%1% 2%3%4%5%6%7%8%9 – naveencgr8 2013-04-08 17:42:21

+0

一个很好的“赶上所有”的例子:http://stackoverflow.com/questions/830565/how-do-i-check-that-a-parameter-被定义的 - 当通话-A-批处理文件/ 34552964#34552964 – 2016-01-01 01:49:29

回答

3

移不改变实际订单,只是索引/指针参数。

试试这个:

@echo off 
echo %1 
shift 
echo %1 
shift 
echo %1 
echo %* 

,你会得到这样的:

a 
b 
c 
a b c d 
2

%*始终打印所有参数的命令行(除%0)。它不符合SHIFT命令。

你需要显式地通过回声定位所有参数:如果你想获得它不会影响%*%1%2等价值%1 %2 %3...

@echo off 
:loop 
if "%~1" neq "" (
    echo %1 %2 %3 %4 %5 %6 %7 %8 %9 
    shift 
    goto :loop 
) 
6

SHIFT是值得的。这个脚本给你你所期望的输出。

@echo off 
setlocal enabledelayedexpansion 

set args=0 
for %%I in (%*) do set /a "args+=1" 
for /l %%I in (1,1,%args%) do (
    set /a idx=0 
    for %%a in (%*) do (
     set /a "idx+=1" 
     if !idx! geq %%I set /p "=%%a "<NUL 
    ) 
    echo; 
) 

输出:

C:\Users\me\Desktop>test a b c d e f 
a b c d e f 
b c d e f 
c d e f 
d e f 
e f 
f