/ / विंडोज बैच: बेतरतीब ढंग से छांटे गए एक फ़ोल्डर में सभी फाइलों के साथ आवेदन निष्पादित करें - विंडोज़, बैच-फ़ाइल, मीडिया प्लेयर

विंडोज बैच: किसी फ़ोल्डर में सभी फ़ाइलों के साथ एप्लिकेशन निष्पादित करें, यादृच्छिक रूप से क्रमबद्ध - विंडोज़, बैच-फ़ाइल, मीडिया प्लेयर

मैं वीडियो चलाने के लिए मीडिया प्लेयर क्लासिक का उपयोग करता हूं। मैं एक प्लेलिस्ट बनाने के लिए एक बैच फ़ाइल बना सकता हूं, जैसे:

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

यह काम करता हैं।

अब मैं एक बैच फ़ाइल बनाना चाहूंगा जो सभी वीडियो को एक फ़ोल्डर में बेतरतीब ढंग से क्रमबद्ध करता हो।

कोई उपाय?

धन्यवाद

उत्तर:

जवाब के लिए 0 № 1

नीचे दिया गया कोड मानता है कि आप वर्तमान निर्देशिका से फ़ाइलें खेल रहे हैं, और यह मानता है कि आपकी कोई भी .avi फ़ाइल नाम से शुरू नहीं होती है =। यह उन सीमाओं को खत्म करने के लिए ज्यादा नहीं होगा।

यदि आपके पास अपने फ़ोल्डर में बहुत अधिक फाइलें हैं, तो अंततः कमांड की लंबाई अधिकतम अनुमत लंबाई 8191 बाइट्स से अधिक होगी।

@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 № 2

यदि किसी वीडियो फ़ाइल के नाम पर विस्मयादिबोधक चिह्न हैं, तो नीचे दी गई बैच फ़ाइल विफल हो जाएगी। जरूरत पड़ने पर इसे ठीक किया जा सकता है।

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

एंटोनियो