Если вы говорите, что хотите использовать аргументы при запуске команды, а не командный файл, у вас есть опции, отличные от простого использования параметров (% 1 и далее)
Опции включают функции в качестве подпрограмм, использующих Call
команда, или, в виде макроса. Кроме того, вы можете создать al oop для получения ввода, используя Set /P
, и прервать l oop после подтверждения ввода.
В зависимости от ваших потребностей, вы также можете создать подпрограмму, которая проверяет for / принимает входные данные из другого файла.
Взгляните здесь на пример программы, которая использует подпрограммы для некоторых идей.
Пример макроса формы аргументов Command , модифицированный, чтобы принимать входные данные в форме списков для присвоения массиву (хотя другие действия в списке также возможны).
@Echo off
Setlocal DisableDelayedExpansion
(Set LF=^
%= NewLine =%)
Set ^"\n=^^^%LF%%LF%^%LF%%LF%^^"
::: \
::: / Macro for recieving exceptionally large arguments
Set "Inc.Class=Set /A %%G+=1"
Set "Inc.Index=Set /A %%H+=1"
Endlocal & Set Define.Array=^&for /L %%n in (1 1 2) do if %%n==2 (%\n%
For /F "tokens=1,2 delims=, " %%G in ("!argv!") do (%\n%
%Inc.Class% %\n%
%= iterate over the tempVar for each argument to be processed =%
For %%A in (!Args-In!) do (%\n%
%= Increment the count for the current array name =%
%Inc.Index% %\n%
%= Assign the current arg to the current Array Index =%
Set "%%G[!%%G!][!%%H!]=%%~A" %\n%
) %\n%
%= Store the Arg-In to reference list of all args for future reuse =%
Set Ref_%%G[!%%G!]=!Args-In! %\n%
) %\n%
) ELSE set argv=,
::: \
::: / Mini-Macro used in conjunction with Define.Array to Pseudo pipe complex strings into the Macro.
Set "Params|=Set Args-In="
::: \
:main
::: / 'Switch on' Define.Array Macro in advance. This is in order to resolve the Setlocal recursion breach that occurs if Expansion is enabled within the macro.
Setlocal enableDelayedExpansion
::: \
::: / Example usage of paired macro's
::: - Demonstrate definition fo linked element names to matrices
%Params|% "Object_A" "Object_B" "Object_C" "Object_D" %Define.Array% Class I1
%Params|% "Object_E" "Object_F" "Object_G" "Object_H" %Define.Array% Element I2
%Params|% "Object_I" "Object_J" "Object_K" "Object_L" %Define.Array% Array I3
%Params|% "Object_M" "Object_N" "Object_O" "Object_P" %Define.Array% Variable I4
%Params|% "Object_Q" "Object_R" "Object_S" "Object_T" %Define.Array% Element I5
%Params|% "Object_U" "Object_V" "Object_W" "Object_X" %Define.Array% Array I6
%Params|% "Object_Y" "Object_Z" "Object_0" "Object_1" %Define.Array% Variable I7
%Params|% "Object_2" "Object_3" "Object_4" "Object_5" %Define.Array% Class I8
%Params|% "Object_6" "Object_7" "Object_8" "Object_9" %Define.Array% Element I9
::: - Demonstrate building values obtained during a for loop into a string to be fed into Define.Array
%Params|% & (For %%A in ("example of" "string building" "Using a For Loop" "^(If defined, the Reset of the Args-In Variable is required^)") do (%Params|%!Args-In! "%%~A")) %Define.Array% BuildString I10
::: Example of ways to Iterate over the Array values.
For %%A in (Class Element Array Variable BuildString) do (
For /L %%C in (1,1,!%%A!) do (
%= subroutine builds a string containing all index values for later reuse by referring to the element and index names =%
Set Ref_%%A[%%C]
%= I# allows a unique reference number for each array to iterate over that array with =%
For /L %%I in (1,1,!I%%C!) do (
If not "!%%A[%%C][%%I]!"=="" Set %%A[%%C][%%I]
)
Echo.
)
Echo.
)
For %%C in (Class Element Array Variable BuildString) do For /L %%E in (1,1,!%%C!) do For %%I in (!Ref_%%C[%%E]!) Do Echo %%~I
Pause >nul
Exit /B
::: \
Этот подход к предоставлению ввода в макрос Обходит ограничения токена структуры аргумента For / F l oop. Он не оставляет структуру полностью, так как он полезен для предоставления возвращаемых переменных для вывода макроса. Чтобы избежать нарушения уровня рекурсии, расширение Delayed включается до раскрытия макроса, а параметр Switch для включения расширения Delayed удаляется из определения макроса.