Воспроизвести случайный фильм / эпизод в папке из контекстного меню

Цель

У меня относительно обширная коллекция мультимедиа, хранящаяся локально на моем компьютере в двух родительских папках ("Фильмы" и "Шоу"). Моя цель - иметь возможность воспроизводить в произвольном порядке любой из фильмов или эпизодов, которые у меня есть в этих папках, щелкнув правой кнопкой мыши родительскую папку и выбрав пункт "Воспроизвести случайный фильм / эпизод" из расширенного контекстного меню.

Пакетный скрипт

У меня есть следующий пакетный скрипт, хранящийся в папке на моем компьютере с Windows 7, который я взял отсюда и адаптировал для поиска .mp4, .mkv а также .avi файлы (все расширения, из которых состоит моя медиа коллекция):

@echo off   
setlocal

:: Create numbered list of files in a temporary file
set "tempFile=%temp%\%~nx0_fileList_%time::=.%.txt"
dir *.mp4,*.mkv,*.avi /b /s /a-d %1 | findstr /n "^" >"%tempFile%" & REM "

:: Count the files
for /f %%N in ('type "%tempFile%" ^| find /c /v ""') do set cnt=%%N
call :openRandomFile

:: Delete the temp file
del "%tempFile%"
exit /b

:openRandomFile
set /a "randomNum=(%random% %% cnt) + 1"
for /f "tokens=1* delims=:" %%A in (
  'findstr "^%randomNum%:" "%tempFile%"'
) do start "" "%%B"

exit /b

Элемент контекстного меню

Чтобы добавить расширенный элемент контекстного меню для запуска вышеуказанного пакетного файла, я создал следующие разделы реестра, в результате чего в папках появится элемент контекстного меню, в котором пакетный файл запускается по пути, указанному при нажатии.

[HKEY_CLASSES_ROOT\Directory\shell\Play random movie/episode]
"Extended"=""
"Position"="Top"

[HKEY_CLASSES_ROOT\Directory\shell\Play random movie/episode\command]
@="\"B:\\Users\\Hashim\\Resources\\Windows Modding\\Play Random.bat\" \"%1\""

Где я застрял

Ключ реестра, кажется, работает достаточно хорошо - этот пункт отображается в расширенном контекстном меню для папок:

... и при нажатии запускает командный файл. Проблемы заключаются в выполнении сценария.

  1. Вместо выбора только .mkv, .mp4 а также .avi Форматы файлов, скрипт выбирает все типы файлов.

  2. Вместо поиска, перечисления и выбора из файлов в целевой папке - папке, в которой сценарий выбран для запуска из контекстного меню, вызываемого правой кнопкой мыши, - вместо этого он запускается в том, что кажется родительской папкой целевой папки и всех подпапок., Поскольку целевая папка в этом случае находится в каталоге пользовательских папок, это по существу означает, что она случайным образом выбирает файлы со всего пользовательского диска.

Эти проблемы сохраняются, несмотря на то, что скрипт использует dir *.mp4,*.mkv,*.avi /b /s /a-d %1 перечислить файлы, где %1 это параметр для целевой папки.

Почему скрипт не работает должным образом? Что я здесь пропустил?

1 ответ

Решение

Пункт 1 из вашего заключения:

Вместо того чтобы выбирать только форматы файлов.mkv, .mp4 и.avi, скрипт выбирает все типы файлов.

Ясно из команды

dir *.mp4,*.mkv,*.avi /b /s /a-d %1

Это инициирует 4 сканирования, 3 из текущего каталога с соответствующими расширениями и одно для переданного значения%1

Я предлагаю вам сначала сделать CD /D "%~1" чтобы режиссер работал из этого места.

@echo off   
setlocal
CD /D "%~1"
:: Create numbered list of files in a temporary file
set "tempFile=%temp%\%~nx0_fileList_%time::=.%.txt"
dir /b /s /a-d *.mp4,*.mkv,*.avi | findstr /n "^" >"%tempFile%" & REM "
Другие вопросы по тегам