চালানোর সময় আমার একটি আইডি এবং একটি পাসওয়ার্ড ফাইলের মধ্যে হার্ডকোড না করে চলার সময় পাস করতে হবে।
কমান্ড লাইনের মতো দেখতে এখানে:
test.cmd admin P@55w0rd > test-log.txt
চালানোর সময় আমার একটি আইডি এবং একটি পাসওয়ার্ড ফাইলের মধ্যে হার্ডকোড না করে চলার সময় পাস করতে হবে।
কমান্ড লাইনের মতো দেখতে এখানে:
test.cmd admin P@55w0rd > test-log.txt
উত্তর:
%*
"সমস্ত" অর্থ বোঝাতে আরেকটি দরকারী টিপ ব্যবহার করা। উদাহরণ স্বরূপ:
echo off
set arg1=%1
set arg2=%2
shift
shift
fake-command /u %arg1% /p %arg2% %*
আপনি যখন চালান:
test-command admin password foo bar
উপরের ব্যাচ ফাইলটি চলবে:
fake-command /u admin /p password admin password foo bar
আমার সিনট্যাক্সটি কিছুটা ভুল হতে পারে তবে এটি সাধারণ ধারণা।
shift
তালিকা থেকে যুক্তিটি "পপ" করে। ওপি-র অনুমানটি ছিল %*
কেবলমাত্র বাকী যুক্তিগুলি আউটপুট দেয় তবে @ জোয়ি যেমন বলেছিলেন তেমনভাবে এটি কাজ করে না।
fake-command /u admin /p password admin password foo bar
। এটি অনেক বছর আগে @ জোই দ্বারা চিহ্নিত করা হয়েছিল।
আমি এটি কীভাবে করেছি তা এখানে:
@fake-command /u %1 /p %2
কমান্ডটি কেমন দেখাচ্ছে তা এখানে:
test.cmd admin P@55w0rd > test-log.txt
%1
প্রথম প্যারামিটার ক্ষেত্রে প্রযোজ্য %2
(এবং এখানে চতুর অংশ) দ্বিতীয় ক্ষেত্রে প্রযোজ্য। আপনি এভাবে 9 টি পরামিতি পাস করতে পারেন।
echo %1 %2
এবং একটি অ কাটা-এবং-pasteable সহজ ক্ষেত্রে দ্বারা বন্ধ করে দেওয়া হয় @
এবং একটি fake-command
প্যারাম সঙ্গে, চিন্তা আমরা পেতে চাই fake-command.bat
পরে এর বিষয়বস্তু (যে ক্ষেত্রে, অতিরিক্ত জটিলতার কারণে পরম নামগুলি উপেক্ষা করতে fake-command.bat
হতে পারে echo %2 %4
)। ভুল, ডুফাস টিএল; ডিআর: আমার মতো বোবা হবেন না। 1. echo echo %1 %2 > test.bat
2. test word1 word2
। 3. লাভ।
আপনি যদি অনুপস্থিত প্যারামিটারগুলি বুদ্ধিমানের সাথে পরিচালনা করতে চান তবে আপনি এর মতো কিছু করতে পারেন:
IF %1.==. GOTO No1
IF %2.==. GOTO No2
... do stuff...
GOTO End1
:No1
ECHO No param 1
GOTO End1
:No2
ECHO No param 2
GOTO End1
:End1
ব্যাচ প্যারামিটার অ্যাক্সেস করা% 1,% 2, ...% 9 বা এছাড়াও% * দিয়ে সহজ হতে পারে
তবে কেবল সামগ্রীটি সহজ হলেই if
জটিল বিষয়বস্তুর মতো সহজ উপায় নেই "&"^&
, কারণ ত্রুটি তৈরি না করে% 1 এ অ্যাক্সেস করা সম্ভব নয়।
set var=%1
set "var=%1"
set var=%~1
set "var=%~1"
লাইনগুলি প্রসারিত হয়
set var="&"&
set "var="&"&"
set var="&"&
set "var="&"&"
এবং প্রতিটি লাইন ব্যর্থ হয়, যেহেতু এর একটি এর &
কোটের বাইরের।
এটি কোনও অস্থায়ী ফাইল থেকে প্যারামিটারের একটি রেকর্ড করা সংস্করণ থেকে পড়ার মাধ্যমে সমাধান করা যেতে পারে ।
@echo off
SETLOCAL DisableDelayedExpansion
SETLOCAL
for %%a in (1) do (
set "prompt="
echo on
for %%b in (1) do rem * #%1#
@echo off
) > param.txt
ENDLOCAL
for /F "delims=" %%L in (param.txt) do (
set "param1=%%L"
)
SETLOCAL EnableDelayedExpansion
set "param1=!param1:*#=!"
set "param1=!param1:~0,-2!"
echo %%1 is '!param1!'
কৌশলটি হ'ল echo on
একটি rem
বিবৃতি দেওয়ার পরে% 1 সক্ষম এবং প্রসারিত করা (এটিও কাজ করে %2 .. %*
)।
এমনকি "&"&
এটি কোনও ত্রুটি তৈরি না করেই প্রতিধ্বনিত হতে পারে, যেমনটি মন্তব্য করা হয়।
তবে এর আউটপুট পুনর্নির্দেশ করতে সক্ষম হতে echo on
আপনার দুটি ফুপ লুপের প্রয়োজন।
অতিরিক্ত অক্ষরগুলি ( * #
যেমন সহায়তাটি প্রদর্শিত /?
হবে REM
) এর মতো সামগ্রীর বিরুদ্ধে নিরাপদ থাকতে ব্যবহৃত হয় ।
বা লাইনের শেষে একটি ক্যারেট একের পরেও একাধিক লাইন চরিত্র হিসাবে কাজ করতে পারে rem
।
তারপরে ফাইলটি থেকে রিম প্যারামিটার আউটপুট পড়ছেন তবে সাবধানতার সাথে।
ফর / এফটি বিলম্বিত সম্প্রসারণ বন্ধ করে কাজ করা উচিত, অন্যথায় সামগ্রী "!" ধ্বংস করা হবে।
অতিরিক্ত অক্ষরগুলি মুছে ফেলার পরে param1
, আপনি এটি পেয়েছেন।
এবং param1
নিরাপদ উপায়ে ব্যবহার করতে, বিলম্বিত প্রসারণ সক্ষম করুন।
&
, আপনার সমাধানটি কেবল সাধারণ বিষয়বস্তু নিয়ে কাজ করে
test.bat ^&
এবং এটি ব্যর্থ হয়েছে। কেবল test.bat "&"
কাজ করে, তবে এটি আমার বক্তব্য ছিল না। আপনি ব্যবহার করতে পারবেন না %*
, %1
REM কলাকৌশল ছাড়া একটি নিরাপদ ভাবে
&
এবং "
হাঁ, এবং মাত্র মত বিকল্পগুলি ব্যবহার করতে ভুলবেন না %%1
যখন ব্যবহার if
এবং for
এবং গ্যাং।
যদি আপনি ডাবলটি ভুলে যান %
তবে আপনি (সম্ভবত নাল) কমান্ড লাইন আর্গুমেন্টগুলিতে প্রতিস্থাপন করবেন এবং আপনি কিছু বিভ্রান্তিকর ত্রুটি বার্তা পাবেন।
if
এবং এর জন্য for
?
for %%d in (*) do echo %%d
কমান্ড লাইন থেকে:for %d in (*) do echo %d
@for %%2 in (testing) do @echo %%2 %1
একটি ব্যাচ ফাইলে, testing 1
যখন এটি 1 ( test 1
) দিয়ে ডাকা হয় তখন উত্পাদন করে ।
%%1
কোনও কমান্ড লাইন যুক্তি অ্যাক্সেস করে না এবং এটি IF
কমান্ডের জন্যও ভুল । কেবল FOR
কমান্ডটি (ব্যাচ ফাইলগুলিতে) ডাবল পার্সেন্ট প্রয়োজন, তবে তারপরেও %%1
একটি ফর প্যারামিটার সংজ্ঞায়িত করা হয় এবং
এটি জটিল করার দরকার নেই। এটি কেবল কমান্ডটি% 1% 2 পরামিতি, উদাহরণস্বরূপ,
@echo off
xcopy %1 %2 /D /E /C /Q /H /R /K /Y /Z
echo copied %1 to %2
pause
"বিরতি" ব্যাচ ফাইলটি কী করেছে তা প্রদর্শন করে এবং আপনার যে কোনও কী চাপার জন্য অপেক্ষা করে। এটি উইন্ডোজ ফোল্ডারে xx.bat হিসাবে সংরক্ষণ করুন।
এটি ব্যবহার করতে, টাইপ করুন, উদাহরণস্বরূপ:
xx c:\f\30\*.* f:\sites\30
এই ব্যাচ ফাইলটি সমস্ত প্রয়োজনীয় পরামিতিগুলির যত্ন নেয়, যেমন কেবলমাত্র ফাইলগুলি অনুলিপি করা, ইত্যাদি I আমি উইন্ডোজ এর আগে থেকেই এটি ব্যবহার করেছি। আপনি যদি ফাইলগুলির নামগুলি অনুলিপি করা দেখতে চান তবে Q
প্যারামিটারটি ছেড়ে দিন ।
একটি বন্ধু আমাকে সম্প্রতি এই বিষয় সম্পর্কে জিজ্ঞাসা করছিল, তাই আমি ভেবেছিলাম যে আমি কীভাবে ব্যাচ ফাইলগুলিতে কমান্ড-লাইন যুক্তিগুলি পরিচালনা করব handle
আপনি দেখতে পাবেন এই কৌশলটিতে কিছুটা ওভারহেড রয়েছে তবে এটি আমার ব্যাচের ফাইলগুলি বোঝার জন্য খুব সহজ এবং বাস্তবায়িত করার জন্য দ্রুত করে তোলে। পাশাপাশি নিম্নলিখিত কাঠামো সমর্থন:
>template.bat [-f] [--flag] [/f] [--namedvalue value] arg1 [arg2][arg3][...]
এটি jist হচ্ছে না :init
, :parse
এবং :main
ফাংশন।
ব্যবহারের উদাহরণ
>template.bat /?
test v1.23
This is a sample batch file template,
providing command-line arguments and flags.
USAGE:
test.bat [flags] "required argument" "optional argument"
/?, --help shows this help
/v, --version shows the version
/e, --verbose shows detailed output
-f, --flag value specifies a named parameter value
>template.bat <- throws missing argument error
(same as /?, plus..)
**** ****
**** MISSING "REQUIRED ARGUMENT" ****
**** ****
>template.bat -v
1.23
>template.bat --version
test v1.23
This is a sample batch file template,
providing command-line arguments and flags.
>template.bat -e arg1
**** DEBUG IS ON
UnNamedArgument: "arg1"
UnNamedOptionalArg: not provided
NamedFlag: not provided
>template.bat --flag "my flag" arg1 arg2
UnNamedArgument: "arg1"
UnNamedOptionalArg: "arg2"
NamedFlag: "my flag"
>template.bat --verbose "argument #1" --flag "my flag" second
**** DEBUG IS ON
UnNamedArgument: "argument #1"
UnNamedOptionalArg: "second"
NamedFlag: "my flag"
template.bat
@::!/dos/rocks
@echo off
goto :init
:header
echo %__NAME% v%__VERSION%
echo This is a sample batch file template,
echo providing command-line arguments and flags.
echo.
goto :eof
:usage
echo USAGE:
echo %__BAT_NAME% [flags] "required argument" "optional argument"
echo.
echo. /?, --help shows this help
echo. /v, --version shows the version
echo. /e, --verbose shows detailed output
echo. -f, --flag value specifies a named parameter value
goto :eof
:version
if "%~1"=="full" call :header & goto :eof
echo %__VERSION%
goto :eof
:missing_argument
call :header
call :usage
echo.
echo **** ****
echo **** MISSING "REQUIRED ARGUMENT" ****
echo **** ****
echo.
goto :eof
:init
set "__NAME=%~n0"
set "__VERSION=1.23"
set "__YEAR=2017"
set "__BAT_FILE=%~0"
set "__BAT_PATH=%~dp0"
set "__BAT_NAME=%~nx0"
set "OptHelp="
set "OptVersion="
set "OptVerbose="
set "UnNamedArgument="
set "UnNamedOptionalArg="
set "NamedFlag="
:parse
if "%~1"=="" goto :validate
if /i "%~1"=="/?" call :header & call :usage "%~2" & goto :end
if /i "%~1"=="-?" call :header & call :usage "%~2" & goto :end
if /i "%~1"=="--help" call :header & call :usage "%~2" & goto :end
if /i "%~1"=="/v" call :version & goto :end
if /i "%~1"=="-v" call :version & goto :end
if /i "%~1"=="--version" call :version full & goto :end
if /i "%~1"=="/e" set "OptVerbose=yes" & shift & goto :parse
if /i "%~1"=="-e" set "OptVerbose=yes" & shift & goto :parse
if /i "%~1"=="--verbose" set "OptVerbose=yes" & shift & goto :parse
if /i "%~1"=="--flag" set "NamedFlag=%~2" & shift & shift & goto :parse
if not defined UnNamedArgument set "UnNamedArgument=%~1" & shift & goto :parse
if not defined UnNamedOptionalArg set "UnNamedOptionalArg=%~1" & shift & goto :parse
shift
goto :parse
:validate
if not defined UnNamedArgument call :missing_argument & goto :end
:main
if defined OptVerbose (
echo **** DEBUG IS ON
)
echo UnNamedArgument: "%UnNamedArgument%"
if defined UnNamedOptionalArg echo UnNamedOptionalArg: "%UnNamedOptionalArg%"
if not defined UnNamedOptionalArg echo UnNamedOptionalArg: not provided
if defined NamedFlag echo NamedFlag: "%NamedFlag%"
if not defined NamedFlag echo NamedFlag: not provided
:end
call :cleanup
exit /B
:cleanup
REM The cleanup function is only really necessary if you
REM are _not_ using SETLOCAL.
set "__NAME="
set "__VERSION="
set "__YEAR="
set "__BAT_FILE="
set "__BAT_PATH="
set "__BAT_NAME="
set "OptHelp="
set "OptVersion="
set "OptVerbose="
set "UnNamedArgument="
set "UnNamedArgument2="
set "NamedFlag="
goto :eof
@ECHO OFF
:Loop
IF "%1"=="" GOTO Continue
SHIFT
GOTO Loop
:Continue
দ্রষ্টব্য: যদি উদ্ধৃতি নিজেই আবদ্ধ "%1"==""
থাকে তবে আইএফ সমস্যা সৃষ্টি করবে %1
।
যে ক্ষেত্রে, ব্যবহার ইন IF [%1]==[]
বা, NT তে 4 (SP6) এ এবং পরে শুধুমাত্র IF "%~1"==""
পরিবর্তে।
এই সহজ রাখা যাক।
এখানে .Cmd ফাইল।
@echo off
rem this file is named echo_3params.cmd
echo %1
echo %2
echo %3
set v1=%1
set v2=%2
set v3=%3
echo v1 equals %v1%
echo v2 equals %v2%
echo v3 equals %v3%
কমান্ড লাইন থেকে এখানে 3 টি কল রয়েছে।
C:\Users\joeco>echo_3params 1abc 2 def 3 ghi
1abc
2
def
v1 equals 1abc
v2 equals 2
v3 equals def
C:\Users\joeco>echo_3params 1abc "2 def" "3 ghi"
1abc
"2 def"
"3 ghi"
v1 equals 1abc
v2 equals "2 def"
v3 equals "3 ghi"
C:\Users\joeco>echo_3params 1abc '2 def' "3 ghi"
1abc
'2
def'
v1 equals 1abc
v2 equals '2
v3 equals def'
C:\Users\joeco>
FOR %%A IN (%*) DO (
REM Now your batch file handles %%A instead of %1
REM No need to use SHIFT anymore.
ECHO %%A
)
এটি ব্যাচ প্যারামিটারগুলির (% *) উপরে লুপ হয় সেগুলি উদ্ধৃত হয় বা না হয়, তারপরে প্রতিটি পরামিতি প্রতিধ্বনিত হয়।
test.bat *.txt
, test.bat cat^&dog
বাTest.bat /?
আমি একটি সরল পঠন_প্রেম স্ক্রিপ্ট লিখেছিলাম যা একটি ফাংশন (বা বাহ্যিক .bat
) হিসাবে ডাকা যেতে পারে এবং বর্তমান পরিবেশে সমস্ত পরিবর্তনশীল রাখবে। এটি মূল পরামিতিগুলিকে সংশোধন করবে না কারণ ফাংশনটি call
মূল পরামিতিগুলির অনুলিপি সহ সম্পাদনা করা হচ্ছে ।
উদাহরণস্বরূপ, নিম্নলিখিত আদেশটি দেওয়া হয়েছে:
myscript.bat some -random=43 extra -greeting="hello world" fluff
myscript.bat
ফাংশনটি কল করার পরে ভেরিয়েবলগুলি ব্যবহার করতে সক্ষম হবে:
call :read_params %*
echo %random%
echo %greeting%
ফাংশনটি এখানে:
:read_params
if not %1/==/ (
if not "%__var%"=="" (
if not "%__var:~0,1%"=="-" (
endlocal
goto read_params
)
endlocal & set %__var:~1%=%~1
) else (
setlocal & set __var=%~1
)
shift
goto read_params
)
exit /B
সীমাবদ্ধতা
-force
। আপনি ব্যবহার করতে পারেন -force=true
তবে সময়ের আগে পরামিতিগুলির একটি তালিকা না জেনে ফাঁকা মানগুলিকে অনুমতি দেওয়ার কোনও উপায় আমি ভাবতে পারি না যার কোনও মান থাকবে না।পরিবর্তণের
-
পরামিতিগুলির আগে সন্ধান করে এখন অন্যান্য কমান্ড লাইনের যুক্তিগুলির সাথে কাজ করে ।@ জন দ্বারা অন্য কোথাও একটি উত্তরে অনুপ্রাণিত হয়ে আমি নামকরণকৃত প্যারামিটারগুলি, alচ্ছিক মান এবং সুইচগুলি বের করার জন্য আরও সাধারণ অ্যালগরিদম তৈরি করেছি cra
আমাদের বলুন যে আমরা একটি ইউটিলিটি বাস্তবায়ন করতে চাই foobar
। এটির জন্য প্রাথমিক কমান্ডের প্রয়োজন। এটিতে একটি alচ্ছিক প্যারামিটার রয়েছে --foo
যা একটি alচ্ছিক মান গ্রহণ করে (যা অবশ্যই অন্য কোনও প্যারামিটার হতে পারে না); মানটি যদি এটি অনুপস্থিত থাকে তবে এটি ডিফল্ট হয় default
। এটিতে একটি alচ্ছিক পরামিতি রয়েছে --bar
যা প্রয়োজনীয় মান গ্রহণ করে। শেষ পর্যন্ত এটি --baz
কোনও মূল্য ছাড়াই পতাকা গ্রহণ করতে পারে । ওহ, এবং এই পরামিতিগুলি যে কোনও ক্রমে আসতে পারে।
অন্য কথায়, এটি দেখতে এটির মতো দেখাচ্ছে:
foobar <command> [--foo [<fooval>]] [--bar <barval>] [--baz]
এখানে একটি সমাধান:
@ECHO OFF
SETLOCAL
REM FooBar parameter demo
REM By Garret Wilson
SET CMD=%~1
IF "%CMD%" == "" (
GOTO usage
)
SET FOO=
SET DEFAULT_FOO=default
SET BAR=
SET BAZ=
SHIFT
:args
SET PARAM=%~1
SET ARG=%~2
IF "%PARAM%" == "--foo" (
SHIFT
IF NOT "%ARG%" == "" (
IF NOT "%ARG:~0,2%" == "--" (
SET FOO=%ARG%
SHIFT
) ELSE (
SET FOO=%DEFAULT_FOO%
)
) ELSE (
SET FOO=%DEFAULT_FOO%
)
) ELSE IF "%PARAM%" == "--bar" (
SHIFT
IF NOT "%ARG%" == "" (
SET BAR=%ARG%
SHIFT
) ELSE (
ECHO Missing bar value. 1>&2
ECHO:
GOTO usage
)
) ELSE IF "%PARAM%" == "--baz" (
SHIFT
SET BAZ=true
) ELSE IF "%PARAM%" == "" (
GOTO endargs
) ELSE (
ECHO Unrecognized option %1. 1>&2
ECHO:
GOTO usage
)
GOTO args
:endargs
ECHO Command: %CMD%
IF NOT "%FOO%" == "" (
ECHO Foo: %FOO%
)
IF NOT "%BAR%" == "" (
ECHO Bar: %BAR%
)
IF "%BAZ%" == "true" (
ECHO Baz
)
REM TODO do something with FOO, BAR, and/or BAZ
GOTO :eof
:usage
ECHO FooBar
ECHO Usage: foobar ^<command^> [--foo [^<fooval^>]] [--bar ^<barval^>] [--baz]
EXIT /B 1
SETLOCAL
যাতে ভেরিয়েবলগুলি কলিং পরিবেশে পালাতে না পারে।SET FOO=
কলিং পরিবেশে কেউ তাদের সংজ্ঞায়িত করার ক্ষেত্রে ভেরিয়েবলগুলি ইত্যাদির সূচনা করতে ভুলবেন না ।%~1
উদ্ধৃতি অপসারণ করতে ব্যবহার করুন ।IF "%ARG%" == ""
এবং না IF [%ARG%] == []
কারণ [
এবং ]
কোনও স্পেসে শেষ হওয়া মানগুলির সাথে খেলবেন না।SHIFT
কোনও IF
ব্লকের ভিতরে থাকেন তবে বর্তমান আরগগুলি যেমন %~1
আপডেট হয় না কারণ IF
পার্স করার সময় তারা নির্ধারিত হয়। আপনি ব্লকটি ব্যবহার করতে %~1
এবং %~2
ভিতরে রাখতে পারেন IF
তবে এটি বিভ্রান্তিকর হবে কারণ আপনার একটি ছিল SHIFT
। আপনি SHIFT
স্পষ্টতার জন্য ব্লকের শেষে রেখে দিতে পারেন, তবে এটি হারিয়ে যেতে পারে এবং / অথবা লোকজনকেও বিভ্রান্ত করতে পারে। সুতরাং "ক্যাপচারিং" %~1
এবং %~1
ব্লকের বাইরে সবচেয়ে ভাল মনে হচ্ছে।IF NOT "%ARG:~0,2%" == "--"
।SHIFT
যখন কোনও একটি পরামিতি ব্যবহার করেন তখনই সাবধান হন ।SET FOO=%DEFAULT_FOO%
অনুশোচনাযোগ্য, তবে বিকল্পটি হবে ব্লকের IF "%FOO%" == "" SET FOO=%DEFAULT_FOO%
বাইরে কোনও যুক্ত করা IF NOT "%ARG%" == ""
। তবে কারণ এই ভিতরে এখনও IF "%PARAM%" == "--foo"
ব্লক, %FOO%
মান মূল্যায়ন করা হত আগে আপনি কি কখনো ব্লক প্রবেশ সেট, তাই আপনি সনাক্ত না হবে যে উভয়--foo
প্যারামিটার উপস্থিত ছিলেন এবং যে %FOO%
মান অনুপস্থিত ছিল।ECHO Missing bar value. 1>&2
stderr এ ত্রুটি বার্তা প্রেরণ করে।ECHO:
করতে পারেন বা তারতম্যগুলির মধ্যে একটি।একটি নতুন ব্যাচ ফাইল তৈরি করুন (উদাহরণ: ওপেনক্লাস.বাট) এবং ফাইলটিতে এই লাইনটি লিখুন:
java %~n1
তারপরে ব্যাচ ফাইলটি রাখুন, যাক, সিস্টেম 32 ফোল্ডারটি আপনার জাভা ক্লাস ফাইলে যান, ডান ক্লিক করুন, বৈশিষ্ট্যগুলি দিয়ে খুলুন ..., তারপরে আপনার ব্যাচ ফাইলটি সন্ধান করুন, এটি নির্বাচন করুন এবং এটিই ...
এটা আমার জন্য কাজ করে.
PS: আমি জাভা ক্লাসটি বন্ধ করার সাথে সাথে সিএমডি উইন্ডোটি বন্ধ করার কোনও উপায় খুঁজে পাচ্ছি না। আপাতত ...
start /wait java %~n1
সহজ সমাধান (যদিও প্রশ্ন পুরানো)
Test1.bat
echo off
echo "Batch started"
set arg1=%1
echo "arg1 is %arg1%"
echo on
pause
CallTest1.bat
call "C:\Temp\Test1.bat" pass123
আউটপুট
YourLocalPath>call "C:\Temp\test.bat" pass123
YourLocalPath>echo off
"Batch started"
"arg1 is pass123"
YourLocalPath>pause
Press any key to continue . . .
যেখানে YourLocalPath বর্তমান ডিরেক্টরি পাথ।
জিনিসগুলিকে সহজ রাখতে ভেরিয়েবলের মধ্যে কমান্ড প্যারাম সংরক্ষণ করুন এবং তুলনার জন্য ভেরিয়েবল ব্যবহার করুন।
এটি কেবল লেখার পক্ষে সহজ নয় পাশাপাশি এটি বজায় রাখাও সহজ তাই পরে যদি অন্য কোনও ব্যক্তি বা আপনি দীর্ঘ সময় পরে আপনার স্ক্রিপ্টটি পড়ে থাকেন তবে এটি বুঝতে এবং বজায় রাখা সহজ হবে।
কোড ইনলাইন লিখতে: অন্যান্য উত্তর দেখুন।
লুপিং ব্যবহারের জন্য সমস্ত যুক্তি এবং খাঁটি ব্যাচে পান:
ওবস: ব্যবহার ছাড়াই:?*&<>
@echo off && setlocal EnableDelayedExpansion
for %%Z in (%*)do set "_arg_=%%Z" && set/a "_cnt+=1+0" && (
call set "_arg_[!_cnt!]=!_arg_!" && for /l %%l in (!_cnt! 1 !_cnt!
)do echo/ The argument n:%%l is: !_arg_[%%l]!
)
goto :eof
আপনার কোডটি আর্গুমেন্ট নম্বরটি যেখানে এটি প্রয়োজন সেখানে কিছু করতে প্রস্তুত, যেমন ...
@echo off && setlocal EnableDelayedExpansion
for %%Z in (%*)do set "_arg_=%%Z" && set/a "_cnt+=1+0" && call set "_arg_[!_cnt!]=!_arg_!"
)
fake-command /u !_arg_[1]! /p !_arg_[2]! > test-log.txt
?*&<>