Associação de arquivos do Windows com base no tipo de arquivo e, em seguida, no tamanho

1

Eu tenho muitos vídeos armazenados no meu disco rígido. Os que são de dvd ou de qualidade inferior (480p, tamanho máximo 7GB), gostaria de abrir usando vlc. Os que são de qualidade HD (720p, 1080p, tamanho maior que 7GB), eu gostaria de abrir usando o PowerDVD.

Todos os arquivos têm a mesma extensão (.mkv). É possível programar a associação de arquivos no Windows, de modo que primeiro analise o tipo de arquivo (mkv, neste caso) e, em seguida, também o tamanho do arquivo. Ele deve usar automaticamente vlc ou PowerDVD para arquivos mkv, com base em seu tamanho.

Por favor, deixe-me saber se tal ajuste é possível.

Sujay Phadke
fonte

Respostas:

5

Você terá que associar a extensão MKV a um arquivo em lotes ou a um script PowerShell / VB que, por sua vez, executa a verificação do tamanho do arquivo e chama o aplicativo apropriado.

Veja como fazer isso com um arquivo em lotes:

  1. Abra o regedit , navegue HKEY_CLASSES_ROOT\.mkve observe o valor (Padrão) . Este é o ProgID . Vamos supor que seja o mkvfile .

  2. Navegue HKEY_CLASSES_ROOT\mkvfile\shell\open\commande modifique o valor (Padrão) para algo semelhante "D:\MKVSizeCheck.bat" "%1".

  3. Agora crie o D:\MKVSizeCheck.batarquivo de lote com o seguinte conteúdo:

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

Veja como fazer isso com o VBScript:

  1. O mesmo que acima.

  2. Navegue HKEY_CLASSES_ROOT\mkvfile\shell\open\commande modifique o valor (Padrão) para algo semelhante wscript //B "D:\MKVSizeCheck.vbs" "%1".

  3. Agora crie o D:\MKVSizeCheck.vbsarquivo com o seguinte conteúdo:

    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
    

Nota # 1: Modifique os caminhos conforme necessário, obviamente. Além disso, o código acima define 500MB (= 524288000 bytes) como o limite, então mude isso também de acordo com suas necessidades (valores muito grandes podem ser possíveis apenas no VBScript).

Observação nº 2: sempre é possível usar um utilitário como o FileTypesMan para executar as etapas 1 e 2 caso não tenha certeza sobre a edição manual do registro.

Observação nº 3: o uso de um arquivo em lotes fará com que a janela do console pisque, o que pode ser irritante. Agora isso pode ser escondido usando algo como Hidden Start ou VBScript, mas por que se preocupar quando é melhor usar diretamente o VBScript?

Karan
fonte
Oi Karan, Obrigado pela pronta resposta. No entanto, não está funcionando. Bem, na verdade, o método de arquivo em lote funciona. No entanto, matemática de arquivo em lotes do Windows parece ser limitada a precisão de 32 bits, portanto, não é possível comparar o tamanho do arquivo com um número como "4 * 1024 * 1024 * 1024" (4 GB). Então eu tentei o método vbscript. Eu mudei a entrada do registro para MKVSizeCheck.vbs "% 1" Mas quando eu tento abrir um arquivo mkv, ele dá o erro dizendo "nnn.mkv" não é um aplicativo Win32 válido. Não parece invocar o arquivo de script. Eu tentei com um arquivo de script vazio também, mas dá o mesmo erro.
Sujay Phadke
Por favor, veja a edição acima (passo 2 da seção VBScript).
Karan
Você poderia explicar o significado de todas as aspas duplas? Por que são necessárias três citações antes do nome do programa, três antes do primeiro e comercial após o segundo e comercial?
Sujay Phadke
Ok, respondendo meu próprio Q aqui (Karan, me corrija se eu estiver errado). As cordas multi-duplas citadas reduzir para algo como isto quando analisado: "C:\Program Files\VLC\VLC.exe objArgs.Item(0) ", 3, false. É explicado aqui: stackoverflow.com/questions/2942554/…
Sujay Phadke
Sim, você acertou. O VBScript requer duas aspas duplas, se você realmente quiser incluir aspas duplas como parte de uma string entre aspas. Assim, o primeiro argumento para executar realmente se torna "C:\Program Files\VLC\VLC.exe" "<mkv file name including path>". Você pode verificar isso facilmente usando um MsgBox para imprimir todo esse primeiro argumento. Se você quer saber sobre os outros dois argumentos para Run (ie 3 e false ), veja aqui .
Karan