Я пытаюсь выбрать случайный файл определенного типа, например *.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%
которая может использоваться для генерации случайных чисел.