Associazione file Windows in base al tipo di file e quindi alle dimensioni


1

Ho molti video memorizzati sul mio hard disk. Quelli che sono di dvd o di bassa qualità (480p, dimensione massima 7GB), vorrei aprire usando vlc. Quelli che sono di qualità HD (720p, 1080p, dimensioni superiori a 7 GB), mi piacerebbe aprire usando PowerDVD.

Tutti i file hanno la stessa estensione (.mkv). È possibile programmare l'associazione di file in Windows, in modo tale da esaminare innanzitutto il tipo di file (in questo caso mkv), e quindi anche le dimensioni del file. Dovrebbe utilizzare automaticamente vlc o PowerDVD per i file mkv, in base alle sue dimensioni.

Per favore fatemi sapere se un tale ritocco è possibile.

Risposte:


5

Dovrai associare l'estensione MKV a un file batch oa uno script PowerShell / VB che a sua volta esegue il controllo della dimensione del file e richiama l'applicazione appropriata.

Ecco come farlo con un file batch:

  1. Aperto regedit , navigare verso HKEY_CLASSES_ROOT\.mkv e nota il (Predefinito) valore. Questo è il ProgID . Supponiamo che lo sia mkvfile .

  2. Navigare verso HKEY_CLASSES_ROOT\mkvfile\shell\open\command e modificare il (Predefinito) valore per qualcosa come "D:\MKVSizeCheck.bat" "%1".

  3. Ora crea il D:\MKVSizeCheck.bat file batch con i seguenti contenuti:

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

Ecco come farlo con VBScript:

  1. Come sopra.

  2. Navigare verso HKEY_CLASSES_ROOT\mkvfile\shell\open\command e modificare il (Predefinito) valore per qualcosa come wscript //B "D:\MKVSizeCheck.vbs" "%1".

  3. Ora crea il D:\MKVSizeCheck.vbs file con il seguente contenuto:

    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: modifica i percorsi come richiesto, ovviamente. Anche il codice sopra imposta 500 MB (= 524288000 byte) come soglia, quindi cambia anche in base alle tue esigenze (valori molto grandi potrebbero essere possibili solo in VBScript).

Nota 2: puoi sempre usare un'utilità come FileTypesMan fare i passaggi 1-2 se non si è sicuri di modificare manualmente il registro.

Nota n. 3: l'uso di un file batch farà lampeggiare una finestra della console che potrebbe essere irritante. Ora questo può essere nascosto usando qualcosa di simile Inizio nascosto o VBScript, ma perché preoccuparsi quando è meglio utilizzare direttamente VBScript in primo luogo.


Ciao Karan, grazie per la pronta risposta. Tuttavia, non funziona. Beh, in realtà il metodo del file batch funziona. Tuttavia, la matematica dei file batch di Windows sembra essere limitata alla precisione a 32 bit, quindi non posso confrontare le dimensioni del file con un numero come "4 * 1024 * 1024 * 1024" (4 GB). Così ho provato il metodo vbscript. Ho modificato la voce di registro in MKVSizeCheck.vbs "% 1", ma quando provo ad aprire un file mkv, viene visualizzato l'errore "nnn.mkv" non è un'applicazione Win32 valida. Non sembra richiamare il file di script. L'ho provato anche con un file di script vuoto, ma dà lo stesso errore.
Sujay Phadke

Vedere la modifica sopra (passaggio 2 della sezione VBScript).
Karan

Potresti spiegare il significato di tutte le doppie virgolette? Perché sono richieste 3 virgolette prima del nome del programma, 3 prima della prima e commerciale dopo la seconda e commerciale?
Sujay Phadke

Ok, rispondendo alla mia Q qui (Karan, correggimi se sbaglio). Le stringhe tra virgolette doppie si riducono a qualcosa di simile quando vengono analizzate: "C:\Program Files\VLC\VLC.exe objArgs.Item(0) ", 3, false. È spiegato qui: stackoverflow.com/questions/2942554/...
Sujay Phadke

Si, hai capito bene. VBScript richiede due virgolette doppie se si desidera includere una virgoletta doppia come parte di una stringa tra virgolette. Quindi il primo argomento di Run diventa effettivamente "C:\Program Files\VLC\VLC.exe" "<mkv file name including path>". È possibile controllare facilmente utilizzando MsgBox per stampare l'intero primo argomento. Se vuoi conoscere gli altri due argomenti di Run (ad es. 3 e falso ), vedi Qui .
Karan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.