Як вибрати випадковий файл у папці?


1

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

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

Як я можу цього досягти?


Для виборців поза темою - питання щодо програмування пакетних файлів Windows на тему на стеці Overflow
DavidPostill

Відповіді:


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

Привіт Дейвіде ... хороша відповідь ... але я думаю, що ми можемо зменшити цей код (вибачте, що я оптимізатор за своєю природою) та створити деякий механізм запобігання помилкам для номера файлу (кількість файлів перед вибором) ... THX
ZEE

@ZEE Я не впевнений, що ви з "кількістю файлів перед вибором" та "запобіганням помилок"? Чи можете ви пояснити трохи більше?
DavidPostill

Якщо порахувати файли ,,, то ми можемо запевнити, що випадкове число завжди буде в розглянутому діапазоні! Попередження помилок ... не вибрано жодного файлу за межами заданого діапазону ... виявити, чи вибраний файл існує та читабельний ... тощо ;-)
ZEE

@ZEE Будь ласка, прочитайте відповідь ще раз, особливо коментарі ( remзаяви). Спочатку я рахую файли. Тоді я отримую випадкове число, яке є правильним діапазоном. Файли повинні існувати, інакше dirвони не знайшли б їх підрахувати. Єдине, що не перевірено, це те, що файл читається.
DavidPostill

1
@ZEE Відповідь була написана для вас, не соромтесь додавати будь-яку перевірку, яку ви хочете, у свій пакетний файл;) Якщо ви дійсно хочете бути розумним, скористайтеся програмою, щоб прочитати файл і побачити, чи містить він дійсний заголовок mp4 ... ви також потрібно буде розробити, як вибрати інший файл, якщо є помилка. Це буде приємною навчальною вправою для вас!
DavidPostill
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.