Почему в батник не берет элементы из переменной?

Написал для батника код. Код засовывает в переменную pyti_k_15_perebivkam имена 15-ти файлов vidov_ska4ali_1.mp4 .... vidov_ska4ali_15.mp4 . Далее он должен сгенерить рандомною цифру 1-15 и взять по сгенереному индексу один элемент из переменной pyti_k_15_perebivkam и записать в imena_perebivok_dla_dobavleniya

- Почему код выдаёт в ответе randomIndex randomIndex вместо (как пример) vidov_ska4ali_2.mp4 vidov_ska4ali_7.mp4 ?

Выдаёт в ответе:
vidov_ska4ali_1.mp4
vidov_ska4ali_2.mp4
vidov_ska4ali_3.mp4
vidov_ska4ali_4.mp4
vidov_ska4ali_5.mp4
vidov_ska4ali_6.mp4
vidov_ska4ali_7.mp4
vidov_ska4ali_8.mp4
vidov_ska4ali_9.mp4
vidov_ska4ali_10.mp4
vidov_ska4ali_11.mp4
vidov_ska4ali_12.mp4
vidov_ska4ali_13.mp4
vidov_ska4ali_14.mp4
vidov_ska4ali_15.mp4
************
2
7
 randomIndex randomIndex


Хотя должен выдать:
vidov_ska4ali_1.mp4
vidov_ska4ali_2.mp4
vidov_ska4ali_3.mp4
vidov_ska4ali_4.mp4
vidov_ska4ali_5.mp4
vidov_ska4ali_6.mp4
vidov_ska4ali_7.mp4
vidov_ska4ali_8.mp4
vidov_ska4ali_9.mp4
vidov_ska4ali_10.mp4
vidov_ska4ali_11.mp4
vidov_ska4ali_12.mp4
vidov_ska4ali_13.mp4
vidov_ska4ali_14.mp4
vidov_ska4ali_15.mp4
************
2
7
vidov_ska4ali_2.mp4 vidov_ska4ali_7.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 imena_perebivok_dla_dobavleniya=
set mestoDlaPerebivok=3

if !mestoDlaPerebivok! GEQ 1 if !mestoDlaPerebivok! LEQ 10 (
set "skolkoShtykPerebivok=2"
for /L %%x in (1,1,!skolkoShtykPerebivok!) do (
set /a randomIndex=!random! %% 15 + 1
echo !randomIndex!
set "randomFile=!pyti_k_15_perebivkam[!randomIndex!]!"
set "imena_perebivok_dla_dobavleniya=!imena_perebivok_dla_dobavleniya! !randomFile!"
)

)

echo !imena_perebivok_dla_dobavleniya!
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ответы на вопрос 2
wisgest
@wisgest
Не ИТ-специалист
Теоретическое обоснование и разбор всех случаев писать лень (возможно, когда-нибудь перепишу и дополню ответ).

У вас точно не работает двукратное раскрытие переменных
set "randomFile=!pyti_k_15_perebivkam[!randomIndex!]!"

Не перепроверял, но попробуйте взамен
call set "randomFile=!pyti_k_15_perebivkam[%%randomIndex%%]!"

и поищите сведения об использовании команды call для отложенного раскрытия переменных, при котором могут быть свои трудности.
Ответ написан
Комментировать
mik777em
@mik777em Автор вопроса
Попробовал сразу присвоить индекс set randomIndex=3 какие элементы брать , и далее рандомом переназначить randomIndex юзая set /a randomIndex=!random! %% 15 + 1 (смотрите код ниже)

Вот что получилось:
63da58f1e2c84354044767.png
Если же так делаю set randomIndex= или вообще не назначаю (например закоментил) :: set randomIndex=3 то вообще на выходе пустота:
63da5aa90c532260413598.png

Код:
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!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы