如何选择文件夹中的随机文件?

如何选择文件夹中的随机文件?

我正在尝试使用 Windows 命令行批处理脚本(无 PowerShell)从文件夹(以及可选的子文件夹)中选择一个特定类型(如 *.mp4)的随机文件

文件完整路径应存储在环境变量中以供进一步使用

我怎样才能实现这个目标?

答案1

如何选择文件夹中的随机文件?

使用以下批处理文件:

@echo off
setlocal
setlocal EnableDelayedExpansion
rem store the matching file names in list
dir /b *.txt /s 2> nul > files
rem count the match files
type files | find "" /v /c > tmp & set /p _count=<tmp 
rem get a random number between 0 and count-1
set /a _random=%random%*(%_count%)/32768
rem we can't skip 0 lines
if %_random% equ 0 (
  for /f "tokens=*" %%i in ('type files') do (
    set _randomfile=%%i
    echo !_randomfile!
    goto :eof
    )
) else (
  for /f "tokens=* skip=%_random%" %%i in ('type files') do (
    set _randomfile=%%i
    echo !_randomfile!
    goto :eof
    )
)

环境变量!_randomfile!将包含随机文件的文件名。

笔记:

  • /s如果您不想匹配子文件夹中的文件,请删除。
  • 0=< %RANDOM%<因此如果您有多个匹配的文件, 32767它将不起作用。32766

进一步阅读

  • Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
  • 寻找- 在文件中搜索文本字符串并显示找到该字符串的所有行。
  • 对于/f- 循环命令以执行另一个命令的结果。
  • 随机的- Windows CMD shell 包含一个名为的动态变量%RANDOM%,可用于生成随机数。

相关内容