Как выбрать случайный файл в папке?

Как выбрать случайный файл в папке?

Я пытаюсь выбрать случайный файл определенного типа, например *.mp4, из папки (и, возможно, подпапок) с помощью пакетного скрипта командной строки Windows (без PowerShell)

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

Как мне этого добиться?

решение1

Как выбрать случайный файл в папке?

Используйте следующий пакетный файл:

@echo off
setlocal
setlocal EnableDelayedExpansion
rem store the matching file names in list
dir /b *.txt /s 2> nul > files
rem count the match files
type files | find "" /v /c > tmp & set /p _count=<tmp 
rem get a random number between 0 and count-1
set /a _random=%random%*(%_count%)/32768
rem we can't skip 0 lines
if %_random% equ 0 (
  for /f "tokens=*" %%i in ('type files') do (
    set _randomfile=%%i
    echo !_randomfile!
    goto :eof
    )
) else (
  for /f "tokens=* skip=%_random%" %%i in ('type files') do (
    set _randomfile=%%i
    echo !_randomfile!
    goto :eof
    )
)

Переменная среды !_randomfile!будет содержать имя случайного файла.

Примечания:

  • Удалите /s, если вы не хотите сопоставлять файлы в подпапках.
  • 0=< %RANDOM%< 32767поэтому это не сработает, если у вас больше 32766совпадающих файлов.

дальнейшее чтение

  • Индекс AZ командной строки Windows CMD- Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • находить- Поиск текстовой строки в файле и отображение всех строк, где она найдена.
  • для /ф- Циклическая команда по результатам другой команды.
  • случайный- Оболочка Windows CMD содержит динамическую переменную, %RANDOM%которая может использоваться для генерации случайных чисел.

Связанный контент