क्या Windows बैच फ़ाइलों में% * निर्माण है?


जवाबों:


10

विंडोज बैच फाइलें (विंडोज एक्सपी के बाद से, लेकिन संभवतः पहले) %*निर्माण का समर्थन करती हैं , जो% 1 से सभी मापदंडों का मूल्यांकन करता है।

दुर्भाग्य से, यह SHIFTकमांड का सम्मान नहीं करता है , इसलिए निम्नलिखित काम नहीं करेगा:

@echo off
set EATEN=%1
shift

call other.bat %*

यह अभी भी दूसरे बैच फ़ाइल पर पहला पैरामीटर पास करेगा।


2
नोट: %*व्हॉट्सएप / उद्धरण संरक्षित करता है।
आरोन दिगुल्ला

10

आप कुछ का उपयोग करके सभी आर्गन्स को एक साथ इकट्ठा कर सकते हैं:

set args=%1
shift
:start
if [%1] == [] goto done
set args=%args% %1
shift
goto start

:done
(use %args% here)

यह इस बात की परवाह किए बिना है कि कितने तर्क हैं।


2

यदि आप पहले 3 मापदंडों को छोड़ना चाहते हैं, उदाहरण के लिए, और बाकी को पास करें:

@echo off
for /f "tokens=1-3*" %%a in ("%*") do (
   set par1=%%a
   set par2=%%b
   set par3=%%c
   set therest=%%d
   )

call other.bat %therest%

मापदंडों में उद्धरण के साथ समस्याएं हो सकती हैं।

Kudos to पैट्रिक कफ, /programming/382587/how-to-get-batch-file-parameters-from-nth-position-on


1

हाँ, वो करते हैं।

आप अपना उदाहरण इस प्रकार लिख सकते हैं:

@echo off
call other.bat %*

भी: शिफ्ट खिड़कियों पर समर्थित है ... यह देखें ।
लेकिन वास्तव में, यह अंतिम लिंक पुष्टि करता है कि शिफ्ट% * के साथ संयोजन में काम नहीं करता है:

• साथ% * का उपयोग करते हुए पारी
  शिफ्ट नहीं% * बैच पैरामीटर पर को प्रभावित किया है।


क्षमा करें लिंक खराब थे ... अब ठीक किया जाना चाहिए।
fretje

(उद्धरण) शिफ्ट के साथ% * के प्रयोग से शिफ्ट का% * बैच पैरामीटर पर कोई प्रभाव नहीं पड़ता है। (/ उद्धरण)
10/07 को वेज

क्यों होता है पतन? सवाल पारी के बारे में नहीं *% के बारे में था।
fretje

आपके पहले उत्तर में केवल "हाँ वे करते हैं" जो एक स्पष्ट लिंक (या उत्तर) नहीं था। आपका अंतिम संपादन ज्यादा एक सभ्य जवाब का अधिक है, शायद इसलिए ...
Thijs

वास्तव में गिरावट तब हुई जब मैंने अधिक स्पष्टीकरण जोड़ा। और मैं मानता हूं कि "हाँ वे करते हैं" पर लिंक स्पष्ट नहीं था, लेकिन यह सवाल का सटीक उत्तर था ...
fretje

0
@echo off
cls
setlocal enabledelayedexpansion

:: Disable the display of information by changing [set "_ENABLE_INFO="] to [set "_ENABLE_INFO=::"].
set "_ENABLE_INFO="
set _DBQ="

set "_PARMS.ORIGINAL=%*" && if defined _PARMS.ORIGINAL (
   if not defined _PARMS.IDX (
      echo Parameter Index^(es^) to extract eg.:
      echo 1 2 5 9 11 39 400
      set /p "_PARMS.IDX=>"
   )
   set "_PARMS.IDX=¡!_PARMS.IDX: =¡ ¡!¡"
   set "_PARMS.IDX=!_PARMS.IDX:¡¡=!"
   set "_PARMS.IDX=!_PARMS.IDX: =!"
   call :_FN_PROC.STRING %*
%_ENABLE_INFO% goto :FINISH
   goto :eof
) else (
   echo No input parameters.
)
goto :eof


:_FN_PROC.STRING
set "_PARMS.PROCESS.STRING=%*"
:_FN_PROC.STRING.LOOP
set "_PARMS.PROCESS.STRING=!_PARMS.PROCESS.STRING:%_DBQ%=¡!"
set /a _PARMS.COUNT+=1
for /f "tokens=1* delims= " %%a in ("!_PARMS.PROCESS.STRING!") do (
   set _PARMS.TMP.CHECK=%%a
   set _PARMS.PROCESS.STRING=%%b
   if "!_PARMS.TMP.CHECK!" NEQ "!_PARMS.TMP.CHECK:¡=!" (
      for /f "tokens=1* delims=¡" %%c in ("%%a !_PARMS.PROCESS.STRING!") do (
         set _PARMS.TMP.CHECK="%%c"
         set _PARMS.PROCESS.STRING=%%d
      )
   )
)

if "!_PARMS.IDX:¡%_PARMS.COUNT%¡=!" EQU "!_PARMS.IDX!" (
   set _PARMS.REMAINING=!_PARMS.REMAINING! !_PARMS.TMP.CHECK!
   set _PARMS.IDX=!_PARMS.IDX!{%_PARMS.COUNT%}
) else (
   set _PARMS.EXTRACTED=!_PARMS.EXTRACTED! !_PARMS.TMP.CHECK!
   set _PARMS.IDX=!_PARMS.IDX:¡%_PARMS.COUNT%¡=!
   set _PARMS.IDX=!_PARMS.IDX![%_PARMS.COUNT%]
)

if "!_PARMS.PROCESS.STRING: =!"=="" (set _PARMS.PROCESS.STRING=)
if defined _PARMS.PROCESS.STRING (goto :_FN_PROC.STRING.LOOP)

set _DBQ=
set _PARMS.TMP.CHECK=
if defined _PARMS.REMAINING (set _PARMS.REMAINING=!_PARMS.REMAINING:~1!)
if defined _PARMS.EXTRACTED (set _PARMS.EXTRACTED=!_PARMS.EXTRACTED:~1!)
goto :eof


:FINISH
echo.
echo _PARMS.IDX ^:
echo    ¡^=¡ no Parameter Index was specified for extraction.
echo    ¡n¡ nth Parameter was not processed (Index larger than Parameters Count).
echo    [n] nth Parameter was Extracted.
echo    {n} nth Parameter was Ignored (Remaining).
echo.
set _
goto :eof

सभी विशेष परिसीमाओं को संरक्षित करता है। 8175 वर्ण प्रति कमांड लाइन सीमा (यदि फ़ाइल नाम, CRLF और यदि निर्दिष्ट हो तो बैच पथ सहित) में अधिक से अधिक पैरामीटर का समर्थन किया जा सकता है। पैरामीटर को दोहरे उद्धरण चिह्नों के साथ वर्गीकृत किया जा सकता है (उदाहरण के लिए। "sw1 = / चुप / छोड़ें: 1 / प्रारंभ = 3")। नोट: डबल कोट्स संरक्षित हैं। दोहरे उद्धरण चिह्नों के व्यवहार की उम्मीद की जाती है (भले ही गलत तरीके से इस्तेमाल किया गया हो, उदाहरण के लिए केवल एकल या "" या "" का उपयोग किया जाता है)। बग रिपोर्ट करने से पहले कृपया कोड को डीबग करें।
धर्म लियोनार्डी

यह बहुत विस्तृत जानकारी है जिसमें बहुत सी डिबग जानकारी दिखाई जा रही है, हालांकि यह सीधे मूल प्रश्न का उत्तर नहीं देता है: दिए call other.batगए मापदंडों के साथ कैसे करें :( मैं "other.bat" कहां लिखता हूं? क्या निकालने के लिए "पैरामीटर इंडेक्स (तों) निकालना संभव है? "क्वेरी? इसके अलावा, clsअंतिम समाधान की आवश्यकता नहीं है।
izogfif
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.