හැඳුනුම්පතක් සහ මුරපදයක් ගොනු ගොනුවකට තදින් කේත කිරීමට වඩා ධාවනය වන අවස්ථාවේදී ලබා දිය යුතුය.
විධාන රේඛාවේ පෙනුම මෙන්න:
test.cmd admin P@55w0rd > test-log.txt
හැඳුනුම්පතක් සහ මුරපදයක් ගොනු ගොනුවකට තදින් කේත කිරීමට වඩා ධාවනය වන අවස්ථාවේදී ලබා දිය යුතුය.
විධාන රේඛාවේ පෙනුම මෙන්න:
test.cmd admin P@55w0rd > test-log.txt
Answers:
තවත් ප්රයෝජනවත් ඉඟියක් නම් %*
“සියල්ල” යන්නෙහි තේරුමයි. උදාහරණයක් වශයෙන්:
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
ලැයිස්තුවෙන් තර්කය "මතු වේ". OP විසින් උපකල්පනය කරන ලද්දේ %*
එය ඉතිරි තර්ක විතර්ක කිරීම පමණක් වන නමුත් @ ජෝයි පැවසූ පරිදි එය එසේ නොවේ.
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
අතර, කපන ලද හා ඇලවිය නොහැකි සරලම නඩුව a @
සහ a fake-command
පරාමිතීන් සමඟ ඉවත දැමීය, අපට fake-command.bat
පසුව අන්තර්ගතය ලැබෙනු ඇතැයි සිතමින් (එවැනි අවස්ථාවක, overcomplicated fake-command.bat
තිබිය හැකිය echo %2 %4
) එම param නම් නොසලකා. වැරදි, ඩූෆස්. ටීඑල්; ඩීආර්: මා තරම් ගොළු නොවන්න. 1. echo echo %1 %2 > test.bat
2 test word1 word2
.. 3. ලාභය.
echo echo %1 %2 > test.bat
. Test.bat ගොනුව එහි ඇත echo %1 %2
(ඔබට එය පෙළ සංස්කාරකයකින්ද ඉතිරි කර ගත හැකිය). දැන් test word1 word2
ඇමතීමට ටයිප් කර වැඩ කළ පරාමිතීන් බලන්න. word1 word2
විධාන රේඛාවට දෝංකාර දෙනු ඇත. ( echo %2 %4
නොසලකා හරිනු ඇත /u
, /p
එම නිසා ඔබට test /u word1 /p word2
එම @
නැතිවූ පරාමිතීන් බුද්ධිමත්ව හැසිරවීමට ඔබට අවශ්ය නම් ඔබට එවැනි දෙයක් කළ හැකිය:
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 හෝ% * සමඟ සරල විය හැකි
නමුත් අන්තර්ගතය සරල නම් පමණි.
වැනි සංකීර්ණ අන්තර්ගතයන් සඳහා සරල ක්රමයක් නොමැත "&"^&
දෝෂයක් ඇති නොකර% 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
පසු% 1 සක්රීය කිරීම සහ පුළුල් කිරීමයි rem
(එය සමඟ ද ක්රියා කරයි%2 .. %*
).
එබැවින් "&"&
දෝෂයක් ඇති නොකර එය දෝංකාර දිය හැකිය.
නමුත් ප්රතිදානය නැවත හරවා යැවීමට echo on
ඔබට ලූප දෙකක් අවශ්ය වේ.
වැනි අමතර * #
අන්තර්ගතයන් ආරක්ෂිත වීමට භාවිතා කරයි /?
(ඒ සඳහා උපකාර පෙන්වනු ඇත REM
).
නැතහොත් රේඛා කෙළවරේ ඇති කරත්තයක් a ට පසුව වුවද බහු අක්ෂර චරිතයක් ලෙස ක්රියා කළ හැකිය rem
.
ඉන්පසු ගොනුවෙන් rem පරාමිති ප්රතිදානය කියවීම , නමුත් ප්රවේශමෙන්.
FOR / F ප්රමාද විය හැකි ප්රසාරණය සමඟ ක්රියා කළ යුතුය, නැතිනම් "!" විනාශ වේවි.
තුළ ඇති අමතර අක්ෂර ඉවත් කිරීමෙන් පසුවparam1
, ඔබට එය ලැබුණි.
param1
ආරක්ෂිත ආකාරයකින් භාවිතා කිරීමට, ප්රමාද වූ ප්රසාරණය සක්රීය කරන්න.
&
, ඔබේ විසඳුම ක්රියාත්මක වන්නේ සරල අන්තර්ගතයකින් පමණි
test.bat ^&
අතර එය අසාර්ථක වේ. test.bat "&"
වැඩ කරන්නේ පමණයි , නමුත් එය මගේ අදහස නොවේ. ඔබ භාවිතා කළ නොහැකි %*
, %1
අත්යාවශ්ය technic තොරව ආරක්ෂිත ආකාරයෙන්
&
සහ උපුටා දැක්වීම් අඩංගු වේ "
ඔව්, හා වගේ විචල්යයන් භාවිතා කිරීමට අමතක කරන්න එපා %%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
FOR පරාමිතියක් නිර්වචනය කර තර්ක වලට ප්රවේශ නොවනු ඇත
එය සංකීර්ණ කිරීමට අවශ්ය නැත. එය හුදෙක්% 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
මෙම කණ්ඩායම් ගොනුව ලිපිගොනු පමණක් පිටපත් කිරීම වැනි අළුත් සියලු පරාමිතීන් ගැන සැලකිලිමත් වේ. මම එය වින්ඩෝස් වලට පෙර සිටම භාවිතා කර ඇත්තෙමි. ලිපිගොනු පිටපත් කරන විට ඒවා දැකීමට ඔබ කැමති නම්, Q
පරාමිතිය අත්හරින්න .
මෑතකදී මිතුරෙකු මගෙන් මෙම විෂය ගැන විමසුවේය, එබැවින් මම විධාන රේඛා තර්ක කණ්ඩායම් ලිපිගොනු වල පළ කරන්නේ කෙසේදැයි පළ කිරීමට සිතුවෙමි.
ඔබට පෙනෙන පරිදි මෙම තාක්ෂණයට තරමක් ඉහළින් ඇත, නමුත් එය මගේ කණ්ඩායම් ලිපිගොනු තේරුම් ගැනීමට පහසු සහ ක්රියාත්මක කිරීමට ඉක්මන් කරයි. පහත සඳහන් ව්යුහයන්ට සහාය වීම:
>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"==""
ඇත්නම් IF ගැටළු %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
නමුත් වටිනාකමක් නැති පරාමිතීන් ලැයිස්තුවක් නොදැන හිස් අගයන්ට ඉඩ දිය හැකි ක්රමයක් ගැන මට සිතිය නොහැක.චේන්ලොග්
-
පෙර පරාමිතීන් සෙවීමෙන් දැන් වෙනත් විධාන රේඛා තර්ක සමඟ ක්රියා කරයි .කණ්ඩායම් ගොනුවේ
set argument1=%1
set argument2=%2
echo %argument1%
echo %argument2%
% 1 සහ% 2 පිළිවෙලින් පළමු හා දෙවන තර්ක අගයන් ලබා දෙයි.
විධාන රේඛාවේදී, තර්කය සම්මත කරන්න
Directory> batchFileName admin P@55w0rd
ප්රතිදානය වනු ඇත
admin
P@55w0rd
ආවේශය වෙනත් තැන්වල පිළිතුර @Jon විසින්, මම නම් පරාමිති, විකල්ප අගයන් හා ස්විච මිරිකා ගැනීම සඳහා වඩා පොදු ඇල්ගොරිතමය නිමැවුණු ඇත.
අපට උපයෝගීතාවයක් ක්රියාත්මක කිරීමට අවශ්ය යැයි කියමු foobar
. එයට ආරම්භක විධානයක් අවශ්ය වේ. එය විකල්ප පරාමිතිය ඇත --foo
ගනී වන විකල්ප අගය (ඇත්තෙන්ම තවත් පරාමිතිය, ලබාගත නොහැකි); අගය අස්ථානගත වී ඇත්නම් එය පෙරනිමිය default
. එය ද විකල්ප පරාමිතිය ඇත --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:
හෝ වෙනස්කම් වලින් එකක්.නව කණ්ඩායම් ගොනුවක් සාදන්න (උදාහරණ: openclass.bat) ගොනුවේ මෙම පේළිය ලියන්න:
java %~n1
ඉන්පසු කණ්ඩායම් ගොනුව තබන්න, system32 ෆෝල්ඩරය, ඔබේ ජාවා පන්තියේ ගොනුව වෙත යන්න, දකුණු ක්ලික් කරන්න, ගුණාංග, විවෘත කරන්න ..., ඉන්පසු ඔබේ කණ්ඩායම් ගොනුව සොයාගෙන එය තෝරන්න, එය එයයි ...
එය මට වැඩ කරයි.
PS: මම ජාවා පන්තිය වසා දැමූ විට cmd කවුළුව වැසීමට ක්රමයක් සොයාගත නොහැක. දැනට...
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 යනු වත්මන් නාමාවලි මාර්ගයයි.
දේවල් සරල ලෙස තබා ගැනීම සඳහා විධාන පරාමිතිය විචල්ය ලෙස ගබඩා කර සංසන්දනය සඳහා විචල්යය භාවිතා කරන්න.
එය ලිවීමට සරල පමණක් නොව නඩත්තු කිරීමද සරල ය. පසුව වෙනත් අයෙකු හෝ ඔබ දීර් script කාලයකට පසු ඔබේ පිටපත කියවන්නේ නම් එය තේරුම් ගැනීමට හා නඩත්තු කිරීමට පහසු වනු ඇත.
කේත පේළියේ ලිවීමට: වෙනත් පිළිතුරු බලන්න.
ලූප් භාවිතා කිරීම සඳහා සියලු තර්ක සහ පිරිසිදු කණ්ඩායමෙන්:
නිරීක්ෂණ: නොමැතිව භාවිතා කිරීම සඳහා:?*&<>
@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