Batch file 播放随机文件夹/子文件夹中的第一个视频
我想创建一个Batch file 播放随机文件夹/子文件夹中的第一个视频,batch-file,Batch File,我想创建一个.bat文件,该文件将在与.bat文件相同的位置打开随机文件夹/子文件夹中的第一个文件 我目前拥有的代码只打开一个随机文件 @echo off setlocal enableextensions disabledelayedexpansion set "rootFolder=G:\Movies\Anime" for /f "usebackq tokens=1,* delims=:" %%a in (` cmd /q /v /e /c "for /f delims^= %
.bat
文件,该文件将在与.bat
文件相同的位置打开随机文件夹/子文件夹中的第一个文件
我目前拥有的代码只打开一个随机文件
@echo off
setlocal enableextensions disabledelayedexpansion
set "rootFolder=G:\Movies\Anime"
for /f "usebackq tokens=1,* delims=:" %%a in (`
cmd /q /v /e /c "for /f delims^= %%a in ('dir /a-d /s /b "%rootFolder%"') do echo(!random!:%%a"
^| sort 2^>nul
^| cmd /q /e /v /c "set /p ".^=" & echo(!.!"
`) do start "" "%%~b"
我还有一个.bat
文件,它生成一个文本文件,其中包含同一位置的所有文件夹列表。我不确定引用它是否更容易
dir /b > Animelist.txt
此外,如果可能,如何排除打开特定类型的文件(如JPEG/其他
.bat
文件?文件夹的随机选择是明确的。第一个视频文件
有点难。如果将dir与@aschipfl建议的几个扩展一起使用,这将预先确定首先查找和找到哪些扩展。另一种排除文件类型的方法更繁琐,因为不知道可能会出现哪些类型 这里我的批编辑了简化了一些部分:
@echo off
setlocal enableextensions Enabledelayedexpansion
Set Cnt=0
Set "Exclude=.bat$ .cmd$ .jpg$ .jpeg$ .txt$"
Pushd "G:\Movies\Anime"
(Echo::: Numbered List of folders
For /f "delims=" %%F in (
'Dir /B/S/AD/ON'
) Do Set /A Cnt+=1&Echo:!Cnt!:%%F
)>DirList.txt
:: Get Random num 1..Cnt
Set /A RndDir=%Random% %% Cnt+1
:: Get random folder name
For /f "tokens=1,* Delims=:" %%F in (
'Findstr "^%RndDir%:" DirList.txt '
) Do Set "DirName=%%G"
Echo selected %RndDir% of %Cnt% = folder %DirName%
Pushd "%DirName%
Set "FileName"
For /f "Delims=" %%F in (
'Dir /B/A-D ^|findstr /i /V "%Exclude%"'
) Do If Not defined FileName Set "FileName=%%~F"
If defined FileName Start "" "%FileName%"
Popd
Popd
Goto :Eof
你可以试试这个
@echo关闭
setlocal enableextensions disabledelayedexpansion
设置“根文件夹=%cd%”
设置文件类型=“*.avi”“*.mpeg”“*.mkv”
推送“%rootFolder%”和(
对于/f“usebackq令牌=1,*delims=:”%a,在(`
cmd/q/v/e/c“为(%fileTypes%)中的/r%%a设置p=&如果不设置,请执行!f!=%%~dpa(设置f=%%~dpa&set/a((%random%%%16273^)+1^)*!random!&echo:%%~dpa)”
^|排序2^>nul
^|cmd/q/e/v/c“设置/p”。^=“&&echo(!!”
`)按一下“%%~b.”和(
对于/f“delims=”%%c in('
目录/b/a-d/on%fileTypes%2^>nul
^|cmd/q/e/v/c“设置/p”。^=“&&echo(!!”
“)是否启动“”“%%~fc”
邻苯二胺
)
邻苯二胺
)
将任务分解为若干部分
- 配置搜索位置和搜索内容(前两个
)set
- 更改到起始文件夹(
)pushd
- 对指定的文件类型执行递归搜索,并输出找到该文件的文件夹的名称(第一个
insidecmd
for/f
- 由于在同一文件夹中可以找到多个文件,请检查是否不会输出重复的元素(
inside firstif
)cmd
- 由于在同一文件夹中可以找到多个文件,请检查是否不会输出重复的元素(
- 对于每个文件夹,生成一个随机数作为前缀(
),并输出文件夹(set/a
)echo
- 按随机数对列表排序(
)排序
- 获取列表中的第一个文件夹。由于列表按随机数排序,因此此文件夹已被随机选择(第二个
内cmd
)用于/f%%a
- 丢弃随机数并仅检索文件夹(用于/f%%a的
中的
和delims
的原因)tokens
- 对指定的文件类型执行递归搜索,并输出找到该文件的文件夹的名称(第一个
- 更改到所选文件夹(
)pushd
- 列出所选文件夹中指定类型的文件(
)dir
- 从该列表中仅选择第一个文件(
)cmd
- 检索所选文件(
)用于/f%%c
- 启动所选文件(
)Start
- 返回上一个文件夹(
)popd
- 列出所选文件夹中指定类型的文件(
- 返回起始文件夹(
)popd
dir/a-d/s/b“%rootFolder%”改为dir/a-d/s/b“%rootFolder%\*.avi”“%rootFolder%\*.mpg”“%rootFolder%\*.wmv”“%rootFolder%\*.mp4”“%rootFolder%\*.m4v”“%rootFolder%\*.mkv”…
仅处理具有特定扩展名的文件…每个文件夹中的文件格式都是一致的,因此总体而言,这对我来说还行,但我可以将这视为其他人的问题。我唯一能想到的解决方法是获取文件名,搜索数字,并在列表中分别排序,然后选择第一个文件。嘿,刚刚试过这个很好,只是添加了几个不同的文件格式,确实遇到了一个我没有遇到的问题。运行了几次.bat后,我注意到它也会随机选择子文件夹。因此,从我的示例来看,它将播放从第1季到第5季的第一个视频,从第1季到第5季的任何视频中选择,都更合适他只是第一个子文件夹。@Josh,如前所述“…随机文件夹/子文件夹中的第一个文件…”。您需要在问题中包含更多,或至少更准确的信息,说明问题所在。没有它,我们只是猜测。