2012-02-26 14 views
6

मैं बैच स्क्रिप्ट बनाने की कोशिश कर रहा हूं जो दिए गए प्रत्येक पैरामीटर के लिए एक ही क्रिया करेगा। उदाहरण के लिए, पैरामीटर के रूप में एक्स फ़ाइलें दे रही है:
script.bat "file1.txt" "file2.txt" "file3.txt" "file4.txt" ... "fileX.txt"
उन्हें नाम बदलने होगा:
"file1.bin" "file2.bin" "file3.bin" "file4.bin" ... "fileX.bin"
नाम बदलें सिर्फ एक उदाहरण है, मैं भी और अधिक जटिल कार्यों के लिए इसकी आवश्यकता होगी।
मुझे लगता है कि यह for each जैसा कुछ होना चाहिए लेकिन मैं बैच स्क्रिप्ट में नया हूं।बैच पार्स प्रत्येक पैरामीटर

मैं सिर्फ आश्चर्य है कि अगर मैं सिर्फ %1 सूचकांक को बढ़ा सकता है ...

उत्तर

8

आप SHIFT का उपयोग मानकों छोड़ दिया शिफ्ट करने के लिए कर सकते हैं। दूसरे शब्दों में बुला पारी दूसरा पैरामीटर% 1 को, तीसरे% 2 आदि के लिए रखा जाएगा

तो तुम जैसे कुछ की जरूरत है:

@ECHO OFF 
:Loop 
IF "%1"=="" GOTO Continue 
    ECHO %1 
SHIFT 
GOTO Loop 
:Continue 

यह सिर्फ क्रम में तर्क प्रिंट होगा, लेकिन आप कर सकते हैं जो भी आप लूप के अंदर चाहते हैं करो।

1

जो मैंने समाप्त किया वह निम्नलिखित था। मैं काम करने के लिए करते हैं, सोचा था कि मैं साझा करेंगे ...

मेरी बैच फ़ाइल के शीर्ष पर मैं निम्नलिखित कोड ...

उपयोग:

::-------------------------------------------------------- 
:: Handle parameters 
::-------------------------------------------------------- 
CALL:ChkSwitch bOverwrite "/OVERWRITE" %* 
CALL:ChkSwitch bMerge "/MERGED" %* 

फिर से नीचे (जहां मैं आमतौर पर अपने सभी कार्यों को जगह) ...

फंक्शन:

::-------------------------------------------------------- 
:: ChkSwitch Function 
::-------------------------------------------------------- 

:ChkSwitch <bRet> <sSwitch> <sParams> (
    SETLOCAL EnableDelayedExpansion 
    SET "switched=0" 

    :ChkSwitchLoop 
    IF "%~3"=="" GOTO ChkSwitchDone 

    IF %~3==%~2 (
     SET "switched=1" 
     GOTO ChkSwitchDone 
    ) 

    SHIFT /3 
    GOTO ChkSwitchLoop 

    :ChkSwitchDone 
) 
( 
    ENDLOCAL 
    SET "%~1=%switched%" 
    EXIT /B 
) 

इसका उपयोग करने के लिए यह सरल है। आप बस उस वैरिएबल में गुजरने वाले फ़ंक्शन को कॉल करते हैं जिसे आप बदलना चाहते हैं या जिस स्विच को आप ढूंढ रहे हैं उसे अगली पास से बनाएं और आखिरी बार स्क्रिप्ट से सभी पैराम पास करें।

2

आप कुछ इस तरह कर सकते हैं और सिर्फ जटिलता आप चाहते जोड़ें:

for %%x in (%*) do (
    echo %%x 
) 
संबंधित मुद्दे