Como seleciono um arquivo aleatório em uma pasta?

1

Estou tentando selecionar um arquivo aleatório de um tipo específico como * .mp4 de uma pasta (e, opcionalmente, subpastas) usando o script de lote de 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?

    
por ZEE 18.07.2015 / 02:02

1 resposta

2

Como faço para selecionar um arquivo aleatório em uma pasta?

Use o seguinte arquivo em lotes:

@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 do arquivo de um arquivo aleatório.

Notas:

  • Remova /s se você não quiser corresponder arquivos em subpastas.
  • 0 = < %RANDOM% < 32767 , portanto, não funcionará se você tiver mais de 32766 arquivos correspondentes.

Outras leituras

  • Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
  • find - Procure uma string de texto em um arquivo & exibir todas as linhas onde ele é encontrado.
  • para / f - Comando Loop contra os resultados de outro comando.
  • aleatório - O shell do Windows CMD contém uma variável dinâmica chamada %RANDOM% que pode ser usada para gerar números aleatórios. / li>
por 18.07.2015 / 03:55