Связывание файлов Windows в зависимости от типа и размера файла

451
Sujay Phadke

У меня есть много видео, хранящихся на моем жестком диске. Те, которые имеют DVD или более низкое качество (480p, максимальный размер 7 ГБ), я хотел бы открыть с помощью vlc. Те, которые имеют качество HD (720p, 1080p, размер больше 7 ГБ), я хотел бы открыть с помощью PowerDVD.

Все файлы имеют одинаковое расширение (.mkv). Можно ли запрограммировать сопоставление файлов в Windows таким образом, чтобы он сначала смотрел на тип файла (в данном случае mkv), а затем также на размер файла. Он должен автоматически использовать VLC или PowerDVD для файлов MKV, в зависимости от его размера.

Пожалуйста, дайте мне знать, если такая настройка возможна.

1

1 ответ на вопрос

5
Karan

You'll have to associate the MKV extension with a batch file or PowerShell/VB script that in turn performs the file size check and invokes the appropriate application.

Here's how to do it with a batch file:

  1. Open regedit, navigate to HKEY_CLASSES_ROOT\.mkv and note the (Default) value. This is the ProgID. Let's assume it's mkvfile.

  2. Navigate to HKEY_CLASSES_ROOT\mkvfile\shell\open\command and modify the (Default) value to something like "D:\MKVSizeCheck.bat" "%1".

  3. Now create the D:\MKVSizeCheck.bat batch file with the following contents:

    if %~z1 leq 524288000 ( start "" /max "C:\Program Files\VLC\VLC.exe" "%~1" ) else ( start "" /max "C:\Program Files\PowerDVD\PowerDVD.exe" "%~1" ) 

Here's how to do it with VBScript:

  1. Same as above.

  2. Navigate to HKEY_CLASSES_ROOT\mkvfile\shell\open\command and modify the (Default) value to something like wscript //B "D:\MKVSizeCheck.vbs" "%1".

  3. Now create the D:\MKVSizeCheck.vbs file with the following contents:

    set objArgs = WScript.Arguments set objShell = WScript.CreateObject("WScript.Shell") set objFSO = WScript.CreateObject("Scripting.FileSystemObject") if objFSO.GetFile(objArgs.Item(0)).Size <= 524288000 then objShell.Run """C:\Program Files\VLC\VLC.exe"" """ & objArgs.Item(0) & """", 3, false else objShell.Run """C:\Program Files\PowerDVD\PowerDVD.exe"" """ & objArgs.Item(0) & """", 3, false end if 

Note #1: Modify the paths as required obviously. Also the code above sets 500MB (= 524288000 bytes) as the threshold so change that too as per your needs (very large values may be possible only in VBScript though).

Note #2: You can always use a utility like FileTypesMan to do steps 1-2 if you're unsure about manually editing the registry.

Note #3: Using a batch file will cause a console window to flash which might be irritating. Now this can be hidden using something like Hidden Start or VBScript, but why bother when it's better to directly use VBScript in the first place.

Привет Каран, спасибо за быстрый ответ. Тем не менее, это не работает. Ну, на самом деле метод пакетного файла работает. Тем не менее математика пакетных файлов Windows, по-видимому, ограничена 32-битной точностью, поэтому я не могу сравнить размер файла с числом типа «4 * 1024 * 1024 * 1024» (4 ГБ). Поэтому я попробовал метод VBScript. Я изменил запись реестра на MKVSizeCheck.vbs "% 1", но когда я пытаюсь открыть файл mkv, выдается сообщение об ошибке, говорящее, что "nnn.mkv" не является допустимым приложением Win32. Кажется, он не вызывает файл сценария. Я пробовал это с пустым файлом сценария, но он выдает ту же ошибку. Sujay Phadke 8 лет назад 0
Пожалуйста, смотрите редактирование выше (шаг 2 раздела VBScript). Karan 8 лет назад 0
Не могли бы вы объяснить значение всех двойных кавычек? Почему 3 кавычки требуются перед названием программы, 3 перед первым амперсандом и после второго амперсанда? Sujay Phadke 8 лет назад 0
Хорошо, отвечаю на мой вопрос Q (Каран, поправь меня, если я ошибаюсь). Строки с множественными двойными кавычками приводят к чему-то вроде этого при анализе: `" C: \ Program Files \ VLC \ VLC.exe objArgs.Item (0) ", 3, false`. Это объясняется здесь: http://stackoverflow.com/questions/2942554/adding-quotes-to-a-string-in-vbscript Sujay Phadke 8 лет назад 0
Да, вы правильно поняли. VBScript требует двух двойных кавычек, если вы действительно хотите включить двойные кавычки как часть строки в кавычках. Таким образом, первый аргумент для запуска на самом деле становится `" C: \ Program Files \ VLC \ VLC.exe """`. Вы можете легко проверить это, используя MsgBox для печати всего этого первого аргумента. Если вы хотите узнать о двух других аргументах для Run (то есть * 3 * и * false *), см. [Здесь] (http: / /ss64.com/vb/run.html). Karan 8 лет назад 0