Позвольте мне поделиться своим способом сделать это, и я не являюсь автором этого метода. Это безопасный способ определить / использовать массивы в cmd / bat.
Я видел это на dostips.com / @ Aacini и после здесь / by @ user6811411 (удаленный пользователь), некоторое время a go. Исходный код макета выглядит примерно так:
Set "var=%var:,="&Set /a i+=1&Set "var[!i!]=%
Я предпочитаю заменить [] на один _
Кроме того, измените i + = на _i + = 1 + 0 , нет необходимости в предопределенной команде: set i=0
Но он всегда работает и требует enabledelayedexpansion
переменных
@echo off && setlocal enabledelayedexpansion && title <nul && title ...\%~nx0
rem :: define a variable for array_layout ::
set "_def_app.type=.html,.htm,.doc,.docx"
set "_def_app_.name=firefox,libreoffice,libreoffice"
rem :: replace/incrementing delimiter by a set /a_i+1%% ::
rem :: (miracle loop in set new variable _var_+i/index) ::
set "_def_app.type_0=%_def_app.type:,="&set/a _i+=1+0&set "_def_app.type_!_i!=%"
set "_def_app_.name_0=%_def_app_.name:,="&set/a _k+=1+0&set "_def_app_.name_!_k!=%"
rem :: use a for loop to echo/use the index array value i/I ::
echo/ && for /l %%i in (0 1 !_i!)do for /f tokens^=* %%I in ('echo/!_def_app.type_%%i!
')do echo/ %%I == ^^!_def_app.type_%%%i^^!
rem :: use a for loop to echo/use the indesx array value k/K ::
echo/ && for /l %%k in (0 1 !_k!)do for /f tokens^=* %%K in ('echo/!_def_app_.name_%%k!
')do echo/ %%K == ^^!_def_app_.name_%%%k^^!
rem :: get total index + 1 = positions
echo/ && for %%s in (i,k)do call set /a "_len_%%s=!_%%s!+1"
echo/ Index of [^^!_def_app.type^^!] is: 0-!_i!
echo/ Length of [^^!_def_app.type^^!] is: !_len_i!
echo/ && echo/ Index of [^^!_def_app_.name^^!] is: 0-!_k!
echo/ Length of [^^!_def_app_.name^^!] is: !_len_k!
%%_APPDIR__%timeout.exe -1 & endlocal & goto :EOF
.html == !_def_app.type_0!
.htm == !_def_app.type_1!
.doc == !_def_app.type_2!
.docx == !_def_app.type_3!
firefox == !_def_app_.name_0!
libreoffice == !_def_app_.name_1!
libreoffice == !_def_app_.name_2!
Index of [!_def_app.type!] is: 0-3
Length of [!_def_app.type!] is: 4
Index of [!_def_app_.name!] is: 0-2
Length of [!_def_app_.name!] is: 3
Press any key to continue...
- Тот же код без комментариев ...
@echo off && setlocal enabledelayedexpansion && title <nul && title ...\%~nx0
set "_def_app.type=.html,.htm,.doc,.docx"
set "_def_app_.name=firefox,libreoffice,libreoffice"
set "_def_app.type_0=%_def_app.type:,="&set/a _i+=1+0&set "_def_app.type_!_i!=%"
set "_def_app_.name_0=%_def_app_.name:,="&set/a _k+=1+0&set "_def_app_.name_!_k!=%"
echo/ && for /l %%i in (0 1 !_i!)do for /f tokens^=* %%I in ('
echo/!_def_app.type_%%i!')do echo/ %%I == ^^!_def_app.type_%%%i^^!
echo/ && for /l %%k in (0 1 !_k!)do for /f tokens^=* %%K in ('
echo/!_def_app_.name_%%k!')do echo/ %%K == ^^!_def_app_.name_%%%k^^!
echo/ && for %%s in (i,k)do call set /a "_len_%%s=!_%%s!+1"
echo/ Index of [^^!_def_app.type^^!] is: 0-!_i!
echo/ Length of [^^!_def_app.type^^!] is: !_len_i!
echo/ && echo/ Index of [^^!_def_app_.name^^!] is: 0-!_k!
echo/ Length of [^^!_def_app_.name^^!] is: !_len_k!
timeout -1 & endlocal & goto :EOF