2013-04-08 17 views
9

Sto provando a visualizzare fino a 9 parametri sullo schermo, e quindi ne visualizzo uno in meno su ogni riga successiva, finché non ne rimane nessuno.Utilizzo del file batch Comando SHIFT

ho provato questo:

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

Risultato effettivo:

a b c d e f 
    a b c d e f 

Risultato previsto:

A B C D E F 
B C D E F 
C D E F 
D E F 
E F 
F 

Qualsiasi aiuto?

Grazie.

+0

Grazie @ David per le istruzioni, ho capito ora. Molte grazie. ECHO% 1% 2% 3% 4% 5% 6% 7% 8% 9 spostamento ECHO% 1% 2% 3% 4% 5% 6% 7% 8% 9 spostamento ECHO% 1% 2% 3% 4% 5% 6% 7% 8% 9 – naveencgr8

+0

un bel esempio "catch all": http://stackoverflow.com/questions/830565/how-do-i-check-that-a-parameter- è definito, quando-chiamare-a-batch-file/34552964 # 34552964 –

risposta

3

spostamento non cambia l'ordine attuale, solo l'indice/puntatore negli argomenti.

Prova questa:

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

e si ottiene questo:

a 
b 
c 
a b c d 
2

Il %* stampa sempre tutti gli argomenti da linea di comando (tranne %0). Non rispetta il comando SHIFT.

È necessario eco esplicitamente tutti gli argomenti in base alla posizione: %1 %2 %3...

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

SHIFT è utile se si vuole ottenere il valore di %1, %2, ecc Non influisce %*. Questo script ti dà l'output che ti aspetti.

@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; 
) 

uscita:

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 
Problemi correlati