खोज…


टिप्पणियों

आप लेबल में <parameter> जोड़कर फ़ंक्शन में शुरुआती चर जोड़ सकते हैं। इन शुरुआती वेरिएबल को %n साथ एक्सेस किया जा सकता है जहां n शुरुआती वेरिएबल नंबर है ( %1 पहले के लिए, %2 दूसरे के लिए। यह %n तरीका% 1 -% 9 के लिए काम करता है। पैरामीटर 10 - 255 के लिए, आपको आवश्यकता होगी। Shift कमांड का उपयोग करने के लिए)।
उदाहरण के लिए:

:function <var1> <var2>

एक बार जब आप call :function param1 param2 उपयोग करते call :function param1 param2 , param1 %1 साथ पहुँचा जा सकता है, और %2 साथ param2
नोट: <parameter> कड़ाई से आवश्यक नहीं है, लेकिन यह पठनीयता के साथ मदद करता है।

एक स्वच्छ चाल है कि उपयोगी होता है जब कई चर के बारे में उड़ान का उपयोग है setlocal और endlocal के साथ मिलकर %nsetlocal और endlocal अनिवार्य रूप से कार्य करना यह कमांड प्रॉम्प्ट, यह में सेट चर केवल रुक जबकि यह फ्रेम में है की अपनी अलग उदाहरण है।

आप उपयोग कर रहे हैं setlocal और endlocal , और तुम लौट रहे हैं वैश्विक मूल्यों इस का उपयोग करें।

endlocal & set var=variable

यह वैश्विक मूल्य सेट var के लिए variable । आप एक साथ कई चर के लिए इनकी श्रृंखला बना सकते हैं।

endlocal & set var=variable & set var2=variable number 2

इस सेट वैश्विक चर var को variable और वैश्विक मूल्य var2 को variable number 2
चूंकि कोड ब्लॉक में कोड भी एक साथ किए जाते हैं, आप ऐसा भी कर सकते हैं।

if "%var%"=="" (
    endlocal
    set %~2=10
)

लेकिन, आप ऐसा नहीं कर सकते

if "%var%"=="" (
    set %~2=10
    endlocal
)

सरल कार्य

call :FunctionX
rem More code...

:FunctionX
rem Some code here.
goto :eof

यह एक बहुत ही सरल कार्य है। फ़ंक्शंस इन-प्रोग्राम कमांड हैं जो एक बार में कई कमांड करते हैं। कार्य कोई लेबल बनाना और उस में कोड डाल द्वारा बनाई गई हैं, और एक बार यह किया है, तो आप एक जोड़ने goto :eof या exit /b <ErrorlevelYou'dLike> जो जहां यह लागू किया गया था लौटती है। फ़ंक्शन call :functionname adparams साथ call :functionname adparams किया जाता है call :functionname adparams

पैरामीटर के साथ फ़ंक्शन

call :tohex 14 result
rem More code...

:tohex <innum> <outvar>
set dec=%1
set outvar=%~2
rem %n and %~n are functionally identical, but %~n is slightly safer.
goto :eof

यह call से अतिरिक्त पैरामीटर लेता है जैसे कि फ़ंक्शन एक अलग बैच फ़ाइल थी।
नोट: <parameter> आवश्यक नहीं है, लेकिन यह पठनीयता के साथ मदद करता है।

सेट्लोकल और एंडलोक का उपयोग करना

set var1=123456789
set var2=abcdef
call :specialvars
echo %var1%, %var2%
rem More code...

:specialvars
setlocal
set var1=987654321
set var2=fedcba
endlocal
goto :eof

जब अंदर अनुभाग setlocal , endlocal अनुभाग, चर, फोन करने वाले का चर से अलग हैं, इसलिए क्यों% var1% और% var2% परिवर्तित नहीं किया गया।

उन सभी को मिलाकर

set importantvar=importantstuff
call :stuff 123 var1
rem More code...

:stuff <arg1> <arg2>
setlocal
set importantvar=%~1
echo Writing some stuff into %~2!
endlocal
set %~2=some stuff
setlocal
set importantvar=junk
endlocal
goto :eof

इस बुनियादी समारोह, का इस्तेमाल करता setlocal और endlocal और तर्क एक अजीब छोटे समारोह बनाने के लिए।

बेनामी फ़ंक्शंस बैच फ़ाइलों में

बेनामी फ़ंक्शंस तकनीक इस तथ्य का उपयोग करती है कि CALL कमांड आंतरिक रूप से GOTO का उपयोग करती है जब सबरूटीन को बुलाया जाता है और चर डबल विस्तार के साथ मदद संदेश मुद्रण का दुरुपयोग करता है:

@echo off
setlocal 
set "anonymous=/?"

call :%%anonymous%% a b c 3>&1 >nul

if "%0" == ":%anonymous%" (
  echo(
  echo Anonymous call:
  echo %%1=%1 %%2=%2 %%3=%3
  exit /b 0
)>&3

आप केवल एक अनाम फ़ंक्शन को कॉल कर सकते हैं यदि इसे CALL बाद परिभाषित किया गया है (या ब्रैकेट्स के संदर्भ के बाद यदि CALL ब्रैकेट के भीतर निष्पादित हुआ है)। इसे बाहरी स्क्रिप्ट से नहीं बुलाया जा सकता है, लेकिन यह सामान्य फ़ंक्शन कॉल की तुलना में धीमी है।

दूसरे बैच फ़ाइल से कॉलिंग फ़ंक्शन

लायब्रेरी में निम्न नाम की फ़ाइल है। cmd :

@echo off

echo -/-/- Batch Functions Library -/-/-

:function1
    echo argument1 - %1
    goto :eof

केवल निष्पादित करने के लिए : बाकी फ़ाइल के कोड के बिना फ़ंक्शन 1 आपको एक लेबल लगाना चाहिए : फोन करने वाले के बल्ले में फ़ंक्शन 1 और इसे इस तरह उपयोग करें:

@echo off

call :function1 ###
exit /b %errorlevel%

:function1
    library.bat %*

आउटपुट होगा ( library.cmd में फ़ंक्शन के बाहर का कोड। library.cmd निष्पादित नहीं किया गया है):

तर्क १ - ###

अधिक जानकारी के लिए इसे देखें



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow