Dieser Code öffnet nicht nur zufällig eine Datei an einer beliebigen Stelle in der Ordnerhierarchie, sondern ist auch effizienter als das Original:
@echo off setlocal :: Create numbered list of files in a temporary file set "tempFile=%temp%\%~nx0_fileList_%time::=.%.txt" dir /b /s /a-d %1 | findstr /n "^" >"%tempFile%" :: Count the files for /f %%N in ('type "%tempFile%" ^| find /c /v ""') do set cnt=%%N call :openRandomFile :: Delete the temp file del "%tempFile%" exit /b :openRandomFile set /a "randomNum=(%random% %% cnt) + 1" for /f "tokens=1* delims=:" %%A in ( 'findstr "^%randomNum%:" "%tempFile%"' ) do start "" "%%B" exit /b
Standardmäßig sucht das Skript nach Dateien im aktuellen Verzeichnis. Sie können jedoch einen Stammpfad als erstes Argument angeben und beginnen stattdessen dort zu suchen.
Der Code ist effizienter, wenn nur eine Datei geöffnet wird, es zeigt jedoch eine Verbesserung, wenn Sie mehrere Dateien öffnen möchten, da die Liste nur einmal generiert werden muss. Es ist auch effizienter, wenn FINDSTR die ausgewählte Datei findet, anstatt die gesamte Liste zu durchlaufen.
Ich habe den Code so strukturiert, dass das Öffnen mehrerer zufälliger Dateien vereinfacht wird. Unten wähle ich zufällig 25 aus und drucke den Befehl aus, um sie zu öffnen. Entfernen Sie einfach das ECHO, um die Dateien tatsächlich zu öffnen:
@echo off setlocal :: Create numbered list of files in a temporary file set "tempFile=%temp%\%~nx0_fileList_%time::=.%.txt" dir /b /s /a-d %1 | findstr /n "^" >"%tempFile%" :: Count the files for /f %%N in ('type "%tempFile%" ^| find /c /v ""') do set cnt=%%N :: Open 25 random files for /l %%N in (1 1 25) do call :openRandomFile :: Delete the temp file del "%tempFile%" exit /b :openRandomFile set /a "randomNum=(%random% %% cnt) + 1" for /f "tokens=1* delims=:" %%A in ( 'findstr "^%randomNum%:" "%tempFile%"' ) do echo start "" "%%B" exit /b