播放位于随机文件夹/子文件夹中的第一个视频

时间:2016-12-13 15:12:51

标签: 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文件?

2 个答案:

答案 0 :(得分:0)

文件夹的随机选择是明确的 @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 有点困难。如果使用带有几个扩展名的目录,如@aschipfl建议,则可以预先确定首先查找和找到哪些扩展名 排除文件类型的另一种方法在不知道可能出现的类型的情况下更加繁琐。

此处我的批次已修改简化了部分内容:

class Sync s eff a | s -> eff where -- FunDep here: eff is determinded via s
  sync :: s -> Eff eff a

data ConsoleSync = ConsoleSync

instance syncWithConsole :: Sync ConsoleSync (console :: CONSOLE | eff) Unit where
  sync _ = log "hello"

foo :: ∀ eff. Eff (console :: CONSOLE | eff) Unit
foo = sync ConsoleSync

答案 1 :(得分:0)

你可以试试这个

@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
    )

分解任务

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