2013-04-08 236 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