Como seleciono um arquivo aleatório em uma pasta?

Como seleciono um arquivo aleatório em uma pasta?

Estou tentando selecionar um arquivo aleatório de um tipo específico como *.mp4 de uma pasta (e opcionalmente subpastas) usando o script em lote da linha de comando do Windows (sem PowerShell)

O caminho completo do arquivo deve ser armazenado em uma variável de ambiente para uso posterior

Como posso conseguir isso?

Responder1

Como seleciono um arquivo aleatório em uma pasta?

Use o seguinte arquivo em lote:

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

A variável de ambiente !_randomfile!conterá o nome de um arquivo aleatório.

Notas:

  • Remova /sse não quiser combinar arquivos em subpastas.
  • 0=< %RANDOM%< 32767então não funcionará se você tiver mais do que 32766arquivos correspondentes.

Leitura adicional

  • Um índice AZ da linha de comando do Windows CMD- Uma excelente referência para todas as coisas relacionadas à linha cmd do Windows.
  • encontrar- Procure uma string de texto em um arquivo e exiba todas as linhas onde ela for encontrada.
  • para /f- Comando de loop em relação aos resultados de outro comando.
  • aleatório- O shell CMD do Windows contém uma variável dinâmica chamada %RANDOM%que pode ser usada para gerar números aleatórios.

informação relacionada