Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 播放随机文件夹/子文件夹中的第一个视频_Batch File - Fatal编程技术网

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
    • 对指定的文件类型执行递归搜索,并输出找到该文件的文件夹的名称(第一个
      cmd
      inside
      for/f
      • 由于在同一文件夹中可以找到多个文件,请检查是否不会输出重复的元素(
        if
        inside first
        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,如前所述“…随机文件夹/子文件夹中的第一个文件…”。您需要在问题中包含更多,或至少更准确的信息,说明问题所在。没有它,我们只是猜测。