Associare a livello di programmazione estensioni di file con l'applicazione su Windows


44

Di recente ho reinstallato Windows e nel configurare il mio ambiente ho notato che tutte le mie associazioni per i vari linguaggi di programmazione che modifico in Notepad ++ sono andate (naturalmente).

Sto pensando per il futuro, non sarebbe grandioso avere una sorta di file batch che potrebbe associare automaticamente una selezione di estensioni di file con N ++ con un clic di un pulsante, piuttosto che dover aspettare fino a quando non incontro tutte queste estensioni passare attraverso il rigmarole di navigare verso l'exe di N ++ ecc.

Non posso farlo con l' Default Programsutilità fornita con Windows 7, perché funziona solo con le estensioni "incontrate".

Quindi è possibile associare programmaticamente le estensioni di file con l'applicazione su Windows?


La soluzione deve essere PowerShell secondo il tuo tag?
Richard,

1
Niente affatto, sto solo cercando di ottenere l'interesse dei drogati della riga di comando di Windows. :)
deed02392

Usa Windows Easy Transfer per trasferire le impostazioni del tuo sistema, è integrato in Windows 7-Vista e può essere scaricato per XP ... microsoft.com/download/en/details.aspx?id=7349
Moab

Questa non è un'opzione poiché l'installazione originale di Windows non è più disponibile.
deed02392

Risposte:


64

Usa Ftype & Assoc per risolvere questo problema (ed è utilizzabile tramite script).

Usa Assoc per ottenere il tipo di file

>Assoc .txt

ti dà:

.txt = file txt

Poi

>Ftype txtfile=C:\Program Files (x86)\Notepad++\notepad++.exe %1

Una volta che conosci il tipo di file puoi usare Ftype per associarlo a un'azione.

Funzionerebbe con i file .php (basta semplicemente scaricarli in un file batch)

Assoc .php=phpfile
Ftype phpfile="C:\Program Files (x86)\Notepad++\notepad++.exe" %1

E puoi copiare queste righe per aggiungere altri file di testo come desideri.


1
Interessante, quando lo faccio >assoc .phpdice che non ha associazione di file? Sembra che ciò che viene impostato quando si specifica un programma predefinito per aprire un tipo di file non sia "registrato" in questo modo. Perché potrebbe essere?
deed02392

18
+1 per due strumenti da riga di comando che non sapevo esistessero.
Ian Boyd,

1
Questa soluzione consente di aprire i file di testo in notepad ++ e non nel programma precedentemente assegnato (notepad). Non farà aprire Notepad ++ quando si fa clic su una nuova estensione di file non registrata (ad es. Pl, py oc) come richiesto dal mittente.
Richard

1
@ deed02392 puoi aggiungere una nuova associazione con assoc 'Assoc .php = phpfile' dovrebbe funzionare
uSlackr

2
L'intento della mia risposta era di mostrarti come usare assoc & ftype, non di scrivere il file batch per te. Ma suonerò insieme
uSlackr

5

Ecco uno script che ha funzionato per me su Windows 10

$exts=@("txt","log","csproj","sql","xml","flobble")
echo "## setting up file associations"
foreach ($ext in $exts){
    $extfile=$ext+"file"
    $dotext="." + $ext
    cmd /c assoc $dotext=$extfile
    cmd /c "ftype $extfile=""C:\Program Files (x86)\Notepad++\notepad++.exe"" %1"
    echo ""
}
  • Deve essere eseguito in una finestra PowerShell amministratore (elevata).
  • Explorer si aggiorna immediatamente e mostra nuove icone di file.

https://gist.github.com/timabell/bc90e0808ec1cda173ca09225a16e194

Grazie alle altre risposte per le informazioni di cui avevo bisogno per farlo funzionare.


3

Come minimo, è necessario creare una chiave di registro che dia a notepad ++ un ID e un percorso e quindi una per ogni estensione che si desidera registrare per usarla.

Per creare l'ID e il percorso (controlla i punti del percorso nella posizione corretta):

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\notepad_pp]
@=""

[HKEY_CLASSES_ROOT\notepad_pp\shell]

[HKEY_CLASSES_ROOT\notepad_pp\shell\open]

[HKEY_CLASSES_ROOT\notepad_pp\shell\open\command]
@="\"C:\\Program Files (x86)\\Notepad++\\notepad++.exe\" \"%1\""

e quindi continua a ripetere il bit successivo, uno per ogni estensione (in questo esempio .plè per Perl):

[HKEY_CLASSES_ROOT\.pl]
@="notepad_pp"

Salvare questo file con l'estensione .rege ora si dovrebbe essere in grado di associare nuovamente tutte le estensioni semplicemente facendo doppio clic su questo file e confermando che si desidera importare le voci nel registro.


1
Interessante, ho cercato e sembra che cosa fa Windows 7 quando si imposta un programma da cui caricare è creare una voce nel comando HKCR \ ext_auto_file \ shell \ open \ con un valore di "C: \ Programmi \ Notepad ++ \ notepad ++ .exe ""% 1 ". Da dove stavi basando la tua?
deed02392

È praticamente lo stesso, solo con ext_auto_file rinominato in qualcosa di leggermente più significativo e più estensioni di file che puntano a una singola voce.
Richard,
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.