目标

目标

目标

我的电脑本地存储着相当丰富的媒体收藏,它们位于两个父文件夹(“电影”和“节目”)。我的目标是能够随机播放这些文件夹中的任何一部电影或剧集,只需右键单击父文件夹并从扩展上下文菜单中选择“播放随机电影/剧集”项即可。

批处理脚本

我的 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 "

相关内容