14

我试图在屏幕上最多显示 9 个参数,然后在接下来的每一行中少显示一个,直到一个都没有。

我试过这个:

@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

有什么帮助吗?

谢谢。

4

4 回答 4

14

SHIFT如果您想获得 , 等的值%1,这是值得的%2。它不影响%*. 此脚本为您提供您期望的输出。

@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
于 2013-04-08T17:47:47.117 回答
9

Shift 不会改变实际顺序,只会改变参数的索引/指针。

试试这个:

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

你得到这个:

a
b
c
a b c d
于 2013-04-08T17:38:41.797 回答
4

“移位对 %* 批处理参数没有影响”

来源:http ://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true

我建议将您的代码更改为循环或其他内容

于 2013-04-08T17:38:20.433 回答
3

%*总是从命令行打印所有参数(除了)%0。它不支持 SHIFT 命令。

您需要按位置明确回显所有参数:%1 %2 %3...

@echo off
:loop
if "%~1" neq "" (
  echo %1 %2 %3 %4 %5 %6 %7 %8 %9
  shift
  goto :loop
)
于 2013-04-08T17:41:21.010 回答