4

Цель

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

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

У меня есть следующий пакетный скрипт, хранящийся в папке на моем компьютере с 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

4

Пункт 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 "

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