Estoy intentando seleccionar un archivo aleatorio de un tipo específico como *.mp4 de una carpeta (y opcionalmente subcarpetas) usando el script por lotes de la línea de comandos de Windows (sin PowerShell)
La ruta completa del archivo debe almacenarse en una variable de entorno para su uso posterior.
¿Cómo puedo conseguir esto?
Respuesta1
¿Cómo selecciono un archivo aleatorio en una carpeta?
Utilice el siguiente archivo por 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
)
)
La variable de entorno !_randomfile!
contendrá el nombre de un archivo aleatorio.
Notas:
- Elimínelo
/s
si no desea hacer coincidir archivos en subcarpetas. 0
=<%RANDOM%
<32767
por lo que no funcionará si tiene más de32766
archivos coincidentes.
Otras lecturas
- Un índice AZ de la línea de comando CMD de Windows- Una excelente referencia para todo lo relacionado con la línea cmd de Windows.
- encontrar- Busque una cadena de texto en un archivo y muestre todas las líneas donde se encuentra.
- para /f- Comando de bucle contra los resultados de otro comando.
- aleatorio- El shell CMD de Windows contiene una variable dinámica llamada
%RANDOM%
que se puede utilizar para generar números aleatorios.