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
/s
se não quiser combinar arquivos em subpastas. 0
=<%RANDOM%
<32767
então não funcionará se você tiver mais do que32766
arquivos 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.