L'obiettivo. il gol
Ho una raccolta multimediale espansiva relativamente locale memorizzata sul mio computer all'interno di due cartelle principali ("Film" e "Spettacoli"). Il mio obiettivo è di essere in grado di riprodurre a caso uno qualsiasi dei film o degli episodi che ho all'interno di queste cartelle facendo clic con il tasto destro sulla cartella principale e selezionando una voce "Riproduci film / episodio casuale" dal menu di scelta rapida esteso.
Lo script batch
Ho il seguente script batch memorizzato in una cartella sulla mia macchina Windows 7, che io preso da qui e adatto a cercare .mp4
, .mkv
e .avi
file (tutte le estensioni della mia raccolta multimediale):
@echo off
setlocal
:: Create numbered list of files in a temporary file
set "tempFile=%temp%\%~nx0_fileList_%time::=.%.txt"
dir *.mp4,*.mkv,*.avi /b /s /a-d %1 | findstr /n "^" >"%tempFile%" & REM "
:: 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
La voce del menu contestuale
Per aggiungere una voce di menu contestuale estesa per eseguire il suddetto file batch, ho creato le seguenti chiavi del Registro di sistema, che si traducono in una voce di menu di scelta rapida sulle cartelle che esegue il file batch nel percorso specificato quando si fa clic.
[HKEY_CLASSES_ROOT\Directory\shell\Play random movie/episode]
"Extended"=""
"Position"="Top"
[HKEY_CLASSES_ROOT\Directory\shell\Play random movie/episode\command]
@="\"B:\\Users\\Hashim\\Resources\\Windows Modding\\Play Random.bat\" \"%1\""
Dove sono bloccato
La chiave di registro sembra funzionare abbastanza bene: l'elemento viene visualizzato nel menu di scelta rapida esteso per le cartelle:
... e quando viene cliccato, esegue il file batch. I problemi si trovano nell'esecuzione della sceneggiatura.
Invece di selezionare solo il
.mkv
,.mp4
e.avi
formati di file, lo script seleziona tutti i tipi di file.Invece di cercare, elencare e selezionare dai file all'interno della cartella di destinazione - la cartella in cui lo script è selezionato per l'esecuzione dal suo menu di scelta rapida con clic con il pulsante destro - viene eseguito invece su quella che sembra essere la cartella principale della cartella di destinazione e tutte le sottocartelle . Poiché la cartella di destinazione in questo caso si trova nella directory delle cartelle utente, ciò significa essenzialmente che seleziona in modo casuale i file dell'intera unità dell'utente.
Questi problemi persistono nonostante il fatto che lo script usi dir *.mp4,*.mkv,*.avi /b /s /a-d %1
per enumerare i file, dove %1
è il parametro per la cartella di destinazione.
Perché lo script non funziona come previsto? Cosa mi sono perso qui?
https
.
@echo off
e guarda cosa sta facendo il tuo file batch.