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 de32766
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>