1

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

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

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

1 ответ1

2

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

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

@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.
  • find - поиск текстовой строки в файле и отображение всех строк, где она найдена.
  • for /f - Циклическая команда против результатов другой команды.
  • random - оболочка Windows CMD содержит динамическую переменную с именем %RANDOM% которую можно использовать для генерации случайных чисел.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .