我试图在屏幕上显示最多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
任何帮助?
感谢。
答案 0 :(得分:10)
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
答案 1 :(得分:7)
Shift不会改变实际的顺序,只会改变参数的索引/指针。
试试这个:
@echo off
echo %1
shift
echo %1
shift
echo %1
echo %*
你明白了:
a
b
c
a b c d
答案 2 :(得分:4)
“Shift对%*批处理参数没有影响”
来源:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true
我建议将代码更改为循环或其他内容
答案 3 :(得分: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
)