2013-04-08 8 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 %* 

और आप इस मिल: (%0 को छोड़कर)

a 
b 
c 
a b c d 
2

%* हमेशा कमांड लाइन से सभी तर्कों प्रिंट करता है। यह SHIFT कमांड का सम्मान नहीं करता है।

आप explictly स्थिति से सभी तर्कों को प्रतिध्वनित करने की जरूरत है: %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 
संबंधित मुद्दे