Открыть случайную картинку в каталоге

У меня есть неизвестный список папок и подпапок в котором лежат картинки
Я хочу запустить 10 случайных картинок с интервалом в 30 секунд
По возможности закрывать предыдущую по истечению таймера.

@echo off

setlocal enabledelayedexpansion

TIMEOUT [/T] timeout [/NOBREAK]
timeout.exe /t 10

set n=0
for %%f in (*.jpg, *.jpeg, *.gif, *.png) do set /a n+=1
echo Total files %n%

set /a i = %RANDOM% %% n
echo Going to open %i%

set q=0
for %%f in (*.jpg, *.jpeg, *.gif, *.png) do (
  if %i%==!q! set file=%%f
  set /a q+=1
)

echo Filename: %file%
start "" "%file%"

Ответы (1 шт):

Автор решения: Daemon-5

Небольшой пример для заполнения массива из корня каталога с перечнем наугад выбранных файлов картинок.

SET "picture_dir=C:\picture"
SET slide_count=10

SETLOCAL ENABLEDELAYEDEXPANSION

::Ищем общее количество файлов
CD /D  "%picture_dir%"
FOR /F %%i in ('DIR /A-D /B *.jpg *.jpeg *.gif *.png ^|FIND /V /C /I""') DO SET file_count=%%i


::Заполняем массив переменных LIST случайными значениями в диапазоне от 1 до общего количества файлов (где slide_count максимальный номер массива переменных).
FOR /L %%i in (1,1,%slide_count%) DO (
SET r=!RANDOM! * %file_count% / 32768 + 1
SET /A LIST[%%i] = !r!
)


:: В цикле составляем список файлов в формате [номер]имя_файла
FOR /F "DELIMS=] TOKENS=1*" %%i IN ('DIR /A-D /B *.jpg *.jpeg *.gif *.png ^|FIND /V /N /I""') DO (

:: В этом же цикле вызываем процедуру поиска номера строки со значением в массиве переменных. Двойная кавычка впереди второго параметра используется чтобы экранировать значение этой переменной для избежания разбиения её на несколько входных переменных (при наличии  пробелов в значении).
CALL :GET-FileName %%i "%%j
)

:: Вывод массива переменных имён файлов
FOR /L %%i in (1,1,%slide_count%) DO ECHO !LIST[%%i]!

GOTO :EOF


:: Процедур поиска номера в массиве переменных, сопадающего с первой входной переменной.Вторая входная переменная - имя файла
:GET-FileName
FOR /L %%i in (1,1,%slide_count%) DO (
:: Если первая входная переменная совпадает со значением переменной массива, то значению переменной массива присваивается значение второй входной переменной (с убранными двойными кавычками)
IF "[!LIST[%%i]!" EQU "%1" SET "LIST[%%i]=%~2"

)

P.S. Если же нужно искать в подкаталогах - используйте опцию /S для команды DIR

→ Ссылка