เล่นภาพยนตร์ / ตอนสุ่มภายในโฟลเดอร์จากเมนูตามบริบท


4

เป้าหมาย

ฉันมีคอลเลกชันสื่อที่ค่อนข้างกว้างจัดเก็บไว้ในเครื่องของฉันภายในสองโฟลเดอร์หลัก ("ภาพยนตร์" และ "รายการ") เป้าหมายของฉันคือสามารถเล่นสุ่มภาพยนตร์หรือตอนใดก็ได้ที่ฉันมีในโฟลเดอร์เหล่านี้โดยคลิกขวาที่โฟลเดอร์หลักและเลือกรายการ "เล่นภาพยนตร์ / ตอนสุ่ม" จากเมนูบริบทแบบขยาย

สคริปต์ชุด

ฉันมีสคริปต์ชุดต่อไปเก็บไว้ในโฟลเดอร์บน Windows 7 เครื่องของเราซึ่งเราเอามาจากที่นี่และปรับตัวที่จะมองหา.mp4, .mkvและ.aviไฟล์ (ส่วนขยายทั้งหมดของคอลเลกชันที่สื่อของฉันประกอบด้วย):

@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

รายการเมนูบริบท

ในการเพิ่มรายการเมนูบริบทแบบขยายเพื่อเรียกใช้ไฟล์แบตช์ด้านบนฉันสร้างรีจิสตรีคีย์ต่อไปนี้ซึ่งส่งผลให้รายการเมนูบริบทในโฟลเดอร์ที่เรียกใช้ไฟล์แบตช์ที่เส้นทางที่ระบุเมื่อคลิก

[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\""

ฉันอยู่ที่ไหน

ดูเหมือนว่ารีจิสตรีคีย์จะทำงานได้ดีพอ - ไอเท็มจะแสดงในเมนูบริบทแบบขยายสำหรับโฟลเดอร์:

ป้อนคำอธิบายรูปภาพที่นี่

... และเมื่อคลิกมันจะเรียกใช้ไฟล์แบตช์ ปัญหาอยู่ที่การทำงานของสคริปต์

  1. แทนที่จะเลือกเพียง.mkv, .mp4และ.aviรูปแบบไฟล์สคริปต์เลือกไฟล์ทุกประเภท

  2. แทนที่จะค้นหาแสดงรายการและเลือกจากไฟล์ภายในโฟลเดอร์เป้าหมาย - โฟลเดอร์ที่สคริปต์ถูกเลือกให้ทำงานจากเมนูบริบทคลิกขวา - แต่จะทำงานในสิ่งที่ดูเหมือนจะเป็นโฟลเดอร์หลักของโฟลเดอร์เป้าหมายและโฟลเดอร์ย่อยทั้งหมด . เนื่องจากโฟลเดอร์เป้าหมายในกรณีนี้อยู่ภายใต้ไดเรกทอรีโฟลเดอร์ผู้ใช้สิ่งนี้หมายความว่ามันสุ่มเลือกไฟล์จากไดรฟ์ผู้ใช้ทั้งหมด

ปัญหาเหล่านี้ยังคงมีอยู่แม้ว่าข้อเท็จจริงที่ว่าสคริปต์จะใช้dir *.mp4,*.mkv,*.avi /b /s /a-d %1ในการระบุไฟล์โดยที่%1พารามิเตอร์สำหรับโฟลเดอร์เป้าหมาย

ทำไมสคริปต์ไม่ทำงานอย่างที่คาดไว้ ฉันพลาดอะไรไปที่นี่


ใส่ความคิดเห็น@echo offและดูว่าแฟ้มชุดงานของคุณกำลังทำอะไรอยู่
DavidPostill


@DavidPostill - ฉันใช้เวลาในการดีบั๊กมันเป็นวิธีที่ฉันได้รับจากการทำซ้ำครั้งล่าสุดของคำถามไปยังที่นี้ ฉันจะทำจริงก่อนที่คุณโพสต์ความคิดเห็นของคุณในคำถามสุดท้าย แต่ต้องใช้เวลาสักพัก การทำซ้ำปัจจุบันนี้เป็นผลมาจากการดีบั๊กทั้งหมดที่ฉันสามารถทำได้และตอนนี้ฉันปล่อยให้ SU เพื่อช่วยฉันค้นหาสิ่งที่ฉันไม่สามารถทำได้ นอกจากนี้ยังเป็นเพียง FYI, เชื่อมโยงไปยังเว็บไซต์ der Woude httpsร็อบแวนไม่ได้ทำงานเป็นเว็บไซต์ที่ไม่ได้ใช้
Hashim

ลิงก์ได้รับการแก้ไข .....
DavidPostill

คำตอบ:


4

จุดที่ 1 จากข้อสรุปของคุณ:

แทนที่จะเลือกเฉพาะไฟล์. mkv, .mp4 และ. avi สคริปต์จะเลือกไฟล์ทุกประเภท

มีความชัดเจนจากคำสั่ง

dir *.mp4,*.mkv,*.avi /b /s /a-d %1

สิ่งนี้เริ่มต้นการสแกน 4 ครั้งโดย 3 จากไดเรกทอรีปัจจุบันที่มีส่วนขยายที่เกี่ยวข้องและอีกหนึ่งรายการสำหรับค่า% 1 ที่ส่งผ่าน

ฉันขอแนะนำให้คุณทำ a ก่อนCD /D "%~1"เพื่อให้ dir ทำงานจากตำแหน่งนั้น

@echo off   
setlocal
CD /D "%~1"
:: Create numbered list of files in a temporary file
set "tempFile=%temp%\%~nx0_fileList_%time::=.%.txt"
dir /b /s /a-d *.mp4,*.mkv,*.avi | findstr /n "^" >"%tempFile%" & REM "

ว้าวเยี่ยมมากขอบคุณมากสำหรับสิ่งนี้ ฉันรู้ว่ามันจะง่ายอย่างนี้ฉันไม่ควรพลาด มีเหตุผลใดที่คุณใช้โดย"%~1"ไม่สนใจ เนื่องจากการเพิ่ม~เพียงแค่ขยายตัวแปรโดยไม่มีเครื่องหมายคำพูดคุณไม่สามารถอ้างอิงตัวแปรที่ไม่มีเครื่องหมายคำพูดในตอนแรกด้วย%1ใช่หรือไม่ ฉันทดสอบสคริปต์โดยใช้%1และยืนยันว่าใช้งานได้ฉันจึงสงสัยว่ามีข้อเสียในการใช้สคริปต์ที่คุณมีในใจหรือไม่?
Hashim

1
มันเป็นเพียงนิสัย - หากไม่รู้ว่าสิ่งใดผ่านไป หากใส่เครื่องหมายคำพูดไว้ในเครื่องหมายคำพูดพวกเขาอาจเพิ่มเป็นสองเท่าดังนั้นการปิดล้อมและการปอกในท้ายที่สุดการเสนอราคาจะช่วยให้มั่นใจได้ว่าค่าที่ส่งผ่านใหม่นั้น
LotPings

1
ฉันชอบนิสัยที่มีตัวหนอน ... ฉันใช้เวลาส่วนใหญ่ของตัวเองในกรณีที่ฉันไม่เคยพบปัญหากับมัน แต่มีที่ไม่ได้มี +1
Pimp Juice IT
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.