একটি ব্যাচের ফাইলে, আমাকে কি নিম্নলিখিতগুলি (উদাহরণস্বরূপ) করতে হবে?
@echo off
call other.bat %1 %2 %3 %4 %5 %6 %7 %8 %9
একটি ব্যাচের ফাইলে, আমাকে কি নিম্নলিখিতগুলি (উদাহরণস্বরূপ) করতে হবে?
@echo off
call other.bat %1 %2 %3 %4 %5 %6 %7 %8 %9
উত্তর:
উইন্ডোজ ব্যাচ ফাইলগুলি (উইন্ডোজ এক্সপি থেকে, তবে সম্ভবত পূর্ববর্তী) %*
কনস্ট্রাক্টকে সমর্থন করে , যা% 1 থেকে সমস্ত পরামিতিগুলিতে মূল্যায়ন করে।
দুর্ভাগ্যক্রমে, এটি SHIFT
আদেশটি সম্মান করে না , সুতরাং নিম্নলিখিতগুলি কাজ করবে না:
@echo off
set EATEN=%1
shift
call other.bat %*
এটি এখনও প্রথম প্যারামিটারটি দ্বিতীয় ব্যাচের ফাইলে পাস করবে।
%*
সাদা স্থান / উদ্ধৃতি সংরক্ষণ করে।
আপনি এই জাতীয় কিছু ব্যবহার করে সমস্ত আরগগুলি একত্রিত করতে পারেন:
set args=%1
shift
:start
if [%1] == [] goto done
set args=%args% %1
shift
goto start
:done
(use %args% here)
এটি কতগুলি যুক্তিই বিবেচনা না করেই কাজ করে।
আপনি যদি প্রথম 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%
পরামিতিগুলিতে উদ্ধৃতিগুলির সাথে সমস্যা হতে পারে।
প্যাট্রিক কাফকে কুডোস, /programming/382587/how-to-get-batch-file-paraters-from-nth-position-on
আপনি আপনার উদাহরণটি নিম্নরূপ লিখতে পারেন:
@echo off
call other.bat %*
এছাড়াও: শিফট জানালা সমর্থিত ... দেখুন এই ।
তবে প্রকৃতপক্ষে, এই শেষ লিঙ্কটি নিশ্চিত করে যে শিফটটি% * এর সাথে একত্রে কাজ করে না:
Sh
শিফট শিফট সহ% * ব্যবহার করার ফলে% * ব্যাচের প্যারামিটারে কোনও প্রভাব নেই।
@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
call other.bat
হ'ল প্রচুর ডিবাগ তথ্য দেখায়, যদিও এটি সরাসরি মূল প্রশ্নের উত্তর দেয় না: প্রদত্ত প্যারামিটারগুলি দিয়ে কীভাবে ব্যবহার করা যায় :( আমি "other.bat" কোথায় লিখব? নিষ্কাশনের জন্য "প্যারামিটার সূচক (এস) অপসারণ করা কি সম্ভব? "ক্যোয়ারী? এছাড়াও, cls
চূড়ান্ত সমাধানের প্রয়োজন হয় না