Wie wähle ich eine zufällige Datei in einem Ordner aus?

Wie wähle ich eine zufällige Datei in einem Ordner aus?

Ich versuche, mithilfe des Windows-Befehlszeilen-Batch-Skripts (keine PowerShell) eine zufällige Datei eines bestimmten Typs wie *.mp4 aus einem Ordner (und optional Unterordnern) auszuwählen.

Der vollständige Dateipfad sollte zur späteren Verwendung in einer Umgebungsvariable gespeichert werden

Wie kann ich das erreichen?

Antwort1

Wie wähle ich eine zufällige Datei in einem Ordner aus?

Verwenden Sie die folgende Batchdatei:

@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
    )
)

Die Umgebungsvariable !_randomfile!enthält den Dateinamen einer zufälligen Datei.

Anmerkungen:

  • Entfernen Sie es /s, wenn Sie keine Übereinstimmung mit Dateien in Unterordnern wünschen.
  • 0=< %RANDOM%< 32767es funktioniert also nicht, wenn Sie mehr als 32766passende Dateien haben.

Weiterführende Literatur

  • Ein AZ-Index der Windows CMD-Befehlszeile- Ein hervorragendes Nachschlagewerk zu allem, was mit der Windows-Eingabeaufforderung zu tun hat.
  • finden- Suchen Sie in einer Datei nach einer Textzeichenfolge und zeigen Sie alle Zeilen an, in denen sie gefunden wird.
  • für /f- Befehl mit den Ergebnissen eines anderen Befehls wiederholen.
  • zufällig– Die Windows CMD-Shell enthält eine dynamische Variable namens %RANDOM%, die zum Generieren von Zufallszahlen verwendet werden kann.

verwandte Informationen