Почему в батник не берет элементы из переменной?
Вложений: 2
Написал для батника код. Код засовывает в переменную pyti_k_15_perebivkam имена 15-ти файлов vidov_ska4ali_1.mp4 .... vidov_ska4ali_15.mp4 . Далее он должен сгенерить рандомною цифру 1-15 и взять по сгенереному индексу один элемент из переменной pyti_k_15_perebivkam и записать в imena_perebivok_dla_dobavleniya
Попробовал сразу (смотрите код ниже) присвоить индекс set randomIndex=3какие элементы брать , и далее рандомом переназначить randomIndex юзая set /a randomIndex=!random! %% 15 + 1 Вот что получилось: Вложение 4885 Если же так делаю set randomIndex=или вообще не назначаю (например закоментил) :: set randomIndex=3то вообще на выходе пустота: Вложение 4886 - Почему код выдаёт в ответе vidov_ska4ali_3.mp4 vidov_ska4ali_3.mp4 вместо (как пример) vidov_ska4ali_10.mp4 vidov_ska4ali_4.mp4 ? Код: set i=0 for %%x in (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) do ( set /A i+=1 set pyti_k_15_perebivkam[!i!]=vidov_ska4ali_%%x.mp4 ) for /L %%x in (1,1,15) do ( echo !pyti_k_15_perebivkam[%%x]! ) echo ************ set randomIndex=3 set "skolkoShtykPerebivok=2" for /L %%x in (1,1,!skolkoShtykPerebivok!) do ( set /a randomIndex=!random! %% 15 + 1 echo !randomIndex! call set "randomFile=!pyti_k_15_perebivkam[%randomIndex%]!" set "imena_perebivok_dla_dobavleniya=!imena_perebivok_dla_dobavleniya! !randomFile!" ) echo imena_perebivok_dla_dobavleniya !imena_perebivok_dla_dobavleniya! |
Где-то в начале батника должна быть команда:
setlocal enabledelayedexpansion Я так понимаю, она у вас имеется, просто не все скопировано сюда. Далее тут: call set "randomFile=!pyti_k_15_perebivkam[%randomIndex%]!" Переменная %randomIndex% раскрывается до начала цикла, так как заключена в знаки %, потому она имеет исходное значение 3 на всех итерациях цикла. Для разыменования надо вынести этот код в отдельную подпрограмму. Вот так работает: @echo off setlocal enabledelayedexpansion set i=0 for %%x in (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) do ( set /A i+=1 set pyti_k_15_perebivkam[!i!]=vidov_ska4ali_%%x.mp4 ) for /L %%x in (1,1,15) do ( echo !pyti_k_15_perebivkam[%%x]! ) echo ************ set randomIndex=3 set "skolkoShtykPerebivok=2" for /L %%x in (1,1,!skolkoShtykPerebivok!) do ( set /a randomIndex=!random! %% 15 + 1 echo !randomIndex! call :randomFile set "imena_perebivok_dla_dobavleniya=!imena_perebivok_dla_dobavleniya! !randomFile!" ) echo imena_perebivok_dla_dobavleniya !imena_perebivok_dla_dobavleniya! :randomFile set "randomFile=!pyti_k_15_perebivkam[%randomIndex%]!" exit /b |
Часовой пояс GMT +3, время: 17:47. |