我试图在整个屏幕上显示最多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
任何帮助吗?
谢谢。
我试图在整个屏幕上显示最多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
任何帮助吗?
谢谢。
移不改变实际订单,只是索引/指针参数。
试试这个:
@echo off
echo %1
shift
echo %1
shift
echo %1
echo %*
,你会得到这样的:
a
b
c
a b c d
“转变已经没有在%*批处理参数影响”
来源:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true
我建议改变你的代码回路或东西
的%*
始终打印所有参数的命令行(除%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
)
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
@大卫感谢您的指示,我现在明白了。非常感谢。 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
一个很好的“赶上所有”的例子:http://stackoverflow.com/questions/830565/how-do-i-check-that-a-parameter-被定义的 - 当通话-A-批处理文件/ 34552964#34552964 – 2016-01-01 01:49:29