/ / Windows Batch: Exécute l'application avec tous les fichiers dans un dossier, triés au hasard - Windows, fichier de commandes, lecteur multimédia

Lot Windows: Exécute l'application avec tous les fichiers d'un dossier, triés de manière aléatoire - Windows, fichier de commandes, lecteur multimédia.

J'utilise Media Player Classic pour lire des vidéos. Je peux créer un fichier batch pour lire une playlist, comme ceci:

mpc.exe video1.avi video2.avi video3.avi ...

Ça marche.

Maintenant, je voudrais créer un fichier batch qui lit toutes les vidéos dans un dossier trié aléatoirement.

Une idée?

Merci

Réponses:

0 pour la réponse № 1

Le code ci-dessous suppose que vous lisez des fichiers à partir du répertoire en cours, et il suppose qu'aucun de vos noms de fichiers .avi ne commence par =. Il ne faudrait pas grand-chose pour éliminer ces limitations.

Si vous avez trop de fichiers dans votre dossier, la longueur de la commande dépassera finalement la longueur maximale autorisée de 8191 octets.

@echo off
setlocal disableDelayedExpansion
for /f "delims==" %%A in ("set file. 2^>nul") do set "%%A="
for /f "tokens=1* delims=:" %%A in (
"dir /b /a-d *.avi^|findstr /n "^""
) do (
set "file.%%A=%%B"
set "cnt=%%A"
)
set "cmd=mpc.exe"
for /l %%N in (%cnt% -1 1) do call :buildCmd %%N
%cmd%
exit /b

:buildCmd
set /a N=%random% %% %1
set "skip="
if %N% gtr 0 set "skip=skip=%N%"
for /f "%skip% tokens=1* delims==" %%A in ("set file.") do (
set cmd=%cmd% "%%B"
set "%%A="
exit /b
)

0 pour la réponse № 2

Le fichier batch ci-dessous échouera si le nom d'un fichier vidéo a des points d'exclamation. Cela peut être résolu, si nécessaire.

@echo off
setlocal EnableDelayedExpansion

rem Store the file names into an array
set cnt=0
for %%a in (*.avi) do (
set /A cnt+=1
set file[!cnt!]=%%a
)

rem Insert the names in the command line in random order
set cmd=mpc.exe
for /L %%a in (%cnt%,-1,1) do (
set /A i=%%a*!random!/32768+1
for %%i in (!i!) do set cmd=!cmd! "!file[%%i]!"
set file[%%i]=!file[%%a]!
)

%cmd%

Antonio