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^= %%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

如果可能的话,如何排除它打开特定类型的文件,例如 jpegs/其他 .bat 文件?

最佳答案

你可以尝试一下

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "rootFolder=%cd%"
    set fileTypes= "*.avi" "*.mpeg" "*.mkv" 

    pushd "%rootFolder%" && (
        for /f "usebackq tokens=1,* delims=:" %%a in (`
            cmd /q /v /e /c "set p=&for /r %%a in (%fileTypes%) do if not !f!==%%~dpa (set f=%%~dpa&set /a ((%random% %% 16273^)+1^)*!random!&echo :%%~dpa)"
            ^| sort 2^>nul
            ^| cmd /q /e /v /c "set /p ".^=" && echo(!.!"
        `) do pushd "%%~b." && (
            for /f "delims=" %%c in ('
                dir /b /a-d /on %fileTypes% 2^>nul 
                ^| cmd /q /e /v /c "set /p ".^=" && echo(!.!"
            ') do start "" "%%~fc"
            popd
        )
        popd
    )

将任务分解为多个部分

  • 配置搜索位置和搜索内容(前两项设置)
  • 更改为起始文件夹 (pushd)
    • 对指定的文件类型执行递归搜索,并输出找到该文件的文件夹的名称(for/f 内的第一个 cmd
      • 由于在同一文件夹中可以找到多个文件,请检查我们是否不会输出重复的元素(第一个 cmd 内的 if)
    • 对于每个文件夹,生成一个随机数作为前缀 (set/a) 并输出文件夹 (echo)
    • 按随机数对列表进行排序 (sort)
    • 获取列表中的第一个文件夹。由于列表是按随机数排序的,因此该文件夹是随机选择的(for/f %%a 内的第二个 cmd)
    • 丢弃随机数并仅检索文件夹(for/f %%a 中的 delimstokens 的原因)
  • 更改为所选文件夹 (pushd)
    • 列出所选文件夹 (dir) 内指定类型的文件
    • 从此列表中仅选择第一个文件 (cmd)
    • 检索所选文件(for/f %%c)
    • 启动所选文件 (start)
    • 返回上一个文件夹 (popd)
  • 返回起始文件夹 (popd)

关于batch-file - 播放位于随机文件夹/子文件夹中的第一个视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41124463/

相关文章:

windows - 无法使用批处理文件运行python服务器

java - 批处理字符串包含操作优化?

command-line - 命令提示符/Bat 文件 - 创建以今天的日期命名的新文件夹

powershell - 使用 AX 2009 调用 powershell 脚本

batch-file - 如何使用参数调用 Run()

batch-file - Jenkins 无法运行 exe 批处理命令?

java - 使用批处理文件执行Jar中的Main类

windows - 从批处理中解析 SSH 流

windows - 仅列出文件夹中的图像文件

windows - setx 使 Windows 资源管理器滚动到顶部