2013-04-08 27 views
9

Ekranda en fazla 9 parametreyi görüntülemeye çalışıyorum, ve daha sonra her satırda bir tane daha görüntülenene kadar, hiçbiri kalmadı.Batch dosyasını kullanma SHIFT komutu

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

Fiili Sonucu:

Bu çalıştı

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

Beklenen Sonuç:

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

Herhangi bir yardım?

Teşekkürler.

+0

@ David sayesinde şimdi anladım. Çok teşekkürler. ECHO% 1% 2% 3% 4% 5% 6% 7,% 8,% 9 kaydırma ECHO% 1% 2% 3% 4% 5% 6% 7,% 8,% 9 kaydırma ECHO% 1% % 2% 3% 4% 5% 6% 7% 8% 9 – naveencgr8

+0

güzel bir "tümünü yakala" örneği: http://stackoverflow.com/questions/830565/how-do-i-check-that-a-parameter- -tanımlanır-zaman-çağıran-a-toplu-dosya/34552964 # 34552964 –

cevap

3

Shift kodunuzu değiştirerek öneririz, sadece argümanlar içine indeksi/işaretçi. (%0 hariç)

a 
b 
c 
a b c d 
2

%* daima komut satırından tüm argümanları basar:

bu deneyin:

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

Ve bu olsun. SHIFT komutunu onurlandırmıyor.

Sen pozisyona bütün argümanları explictly yankı gerekir: Bu %* etkilemez %1, %2 vb değerini almak istiyorsanız %1 %2 %3...

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

SHIFT faydalıdır. Bu komut size beklediğiniz çıktıyı verir.

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

Çıktı: Talimatlar için

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