2013-04-08 2 views
9

Ich versuche, bis zu 9 Parameter über den Bildschirm anzuzeigen, und dann eine weniger auf jeder folgenden Zeile anzuzeigen, bis keine mehr übrig sind.Verwenden der Batch-Datei SHIFT-Befehl

Ich versuchte dies:

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

Tatsächliches Ergebnis:

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

Erwartetes Ergebnis:

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

Jede Hilfe?

Danke.

+0

@ David Danke für die Anleitung, bekomme ich es jetzt. Danke vielmals. ECHO% 1% 2% 3% 4% 5% 6% 7% 8% 9 Verschiebung ECHO% 1% 2% 3% 4% 5% 6% 7% 8% 9 Verschiebung ECHO% 1% 2% 3% 4% 5% 6% 7% 8% 9 – naveencgr8

+0

ein nettes "alle fangen" beispiel: http://stackoverflow.com/questions/830565/how-doi-i-check-that-a-parameter- ist-definiert-wenn-Aufruf-eine-Batch-Datei/34552964 # 34552964 –

Antwort

3

Verschiebung zu verändern, nicht die tatsächliche Reihenfolge ändern nur der Index/Zeiger in die Argumente.

Try this:

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

Und Sie erhalten diese:

a 
b 
c 
a b c d 
2

Die %* immer alle Argumente aus der Kommandozeile druckt (außer %0). Der SHIFT-Befehl wird nicht berücksichtigt.

Sie müssen explizit alle Argumente von Position Echo zu: %1 %2 %3...

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

SHIFT lohnt, wenn Sie den Wert %1 erhalten möchten, %2 usw. Es ist nicht %* nicht beeinflusst. Dieses Skript gibt Ihnen die Ausgabe, die Sie erwarten.

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

Ausgang:

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 
Verwandte Themen