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

+0

良い "キャッチオール"の例:http://stackoverflow.com/questions/830565/how-do-i-check-that-a-parameter-バッチファイルの呼び出し時に定義されます/ 34552964#34552964 –

答えて

3

シフトするようにコードを変更することをお勧め、引数へのインデックス/ポインタだけです。

このお試しください:

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

をそして、あなたはこの取得:

a 
b 
c 
a b c d 
2

%*は常に(%0を除く)、コマンドラインからすべての引数を出力します。それはSHIFTコマンドを尊重しません。あなたは明示的位置によってすべての引数をエコーする必要が

%1 %2 %3...

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

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 
関連する問題