Associer par programme des extensions de fichier à des applications sous Windows

44

Je viens de réinstaller Windows et, lors de la configuration de mon environnement, j'ai constaté que toutes mes associations pour les différents langages de programmation que je modifie dans Notepad ++ ont disparu (naturellement).

Je pense pour l’avenir, ne serait-il pas formidable d’avoir une sorte de fichier de commandes pouvant associer automatiquement une sélection d’extensions de fichiers avec N ++ en un clic de bouton, plutôt que d’attendre que je rencontre toutes ces extensions à ce moment-là passer par le rigmarole de la navigation vers l'exe N ++, etc.

Je ne peux pas faire cela avec l' Default Programsutilitaire fourni avec Windows 7, car il ne fonctionne qu'avec les extensions "rencontrées".

Est-il donc possible d'associer par programme des extensions de fichier à des applications sous Windows?

deed02392
la source
La solution doit-elle être PowerShell selon votre tag?
Richard
1
Pas du tout, j'essaie simplement de susciter l'intérêt des junkies de la ligne de commande Windows. :)
deed02392
Utiliser Windows Easy Transfer pour transférer vos paramètres du système, son intégré dans Windows 7-Vista et peut être téléchargé pour Windows XP ... microsoft.com/download/en/details.aspx?id=7349
Moab
Ce n'est pas une option puisque l'installation originale de Windows n'est plus disponible.
deed02392
Voir aussi stackoverflow.com/q/212906/10245
Tim Abell

Réponses:

64

Utilisez Ftype & Assoc pour résoudre ce problème (et il est scriptable).

Utilisez Assoc pour obtenir le type de fichier

>Assoc .txt

vous donne:

.txt = txtfile

ensuite

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

Une fois que vous connaissez le type de fichier, vous pouvez utiliser Ftype pour l'associer à une action.

Cela fonctionnerait pour les fichiers .php (il suffit de les insérer dans un fichier batch)

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

Et vous pouvez copier ces lignes pour ajouter d'autres fichiers texte à votre guise.

uSlackr
la source
1
Intéressant, quand je le fais >assoc .phpil dit qu'il n'a pas d'association de fichier? Il semble que ce qui est configuré lorsque vous spécifiez un programme par défaut pour ouvrir un type de fichier n'est pas "enregistré" de cette manière. Pourquoi cela pourrait-il être?
deed02392
18
+1 pour deux outils en ligne de commande dont je ne connaissais pas l'existence.
Ian Boyd
1
Cette solution rend les fichiers texte ouverts dans notepad ++ et non dans le programme précédemment attribué (notepad). Notepad ++ ne s'ouvrira pas lorsque vous cliquerez sur une nouvelle extension de fichier non enregistrée (par exemple, pl, py ou c), comme l'a demandé l'émetteur.
Richard
1
@ deed02392 vous pouvez ajouter une nouvelle association avec assoc 'Assoc .php = phpfile' devrait fonctionner
uSlackr
2
Le but de ma réponse était de vous montrer comment utiliser assoc & ftype, et non d'écrire le fichier de commandes pour vous. Mais je vais jouer le jeu
uSlackr
5

Voici un script qui a fonctionné pour moi sur 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 ""
}
  • Doit être exécuté dans une fenêtre powershell d’administrateur (élevée).
  • Explorer immédiatement actualisé et a montré de nouvelles icônes de fichier.

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

Merci aux autres réponses pour les informations dont j'avais besoin pour que cela fonctionne.

Tim Abell
la source
3

Au minimum, vous devez créer une clé de registre qui attribue à notepad ++ un ID et un chemin, puis une pour chaque extension à enregistrer.

Pour créer l'ID et le chemin (vérifiez que le chemin pointe vers l'emplacement correct):

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

et continuez à répéter le bit suivant, un pour chaque extension (dans cet exemple, .plc'est pour Perl):

[HKEY_CLASSES_ROOT\.pl]
@="notepad_pp"

Enregistrez ce fichier avec l’extension .reget vous devriez maintenant pouvoir réassocier toutes les extensions en double-cliquant sur ce fichier et en confirmant que vous souhaitez importer les entrées dans le registre.

Richard
la source
1
Intéressant, j’ai cherché et il semble que ce que Windows 7 fait lorsque vous définissez un programme de charge est de créer une entrée dans HKCR \ fichier_ext_auto \ shell \ open \ command avec une valeur de "C: \ Program Files \ Notepad ++ \ notepad ++ .exe ""% 1 ". Où basiez-vous la vôtre?
deed02392
C'est fondamentalement la même chose, avec ext_auto_file renommé en quelque chose de légèrement plus significatif et plusieurs extensions de fichiers pointant vers une seule entrée.
Richard