Asociar de forma programática extensiones de archivo con la aplicación en Windows

44

Recientemente reinstalé Windows y, al configurar mi entorno, me di cuenta de que todas mis asociaciones para los diversos lenguajes de programación que edito en Notepad ++ han desaparecido (naturalmente).

Estoy pensando en el futuro, ¿no sería grandioso tener algún tipo de archivo por lotes que pudiera asociar automáticamente una selección de extensiones de archivo con N ++ con solo hacer clic en un botón, en lugar de tener que esperar hasta que encuentre todas estas extensiones en ese momento? pasar por el rigmarole de navegar al exe N ++ etc.

No puedo hacer esto con la Default Programsutilidad que viene con Windows 7, porque solo funciona con extensiones que se han 'encontrado'.

Entonces, ¿es posible asociar programáticamente extensiones de archivo con la aplicación en Windows?

escritura02392
fuente
¿La solución tiene que ser PowerShell según su etiqueta?
Richard
1
En absoluto, solo tratando de captar el interés de los adictos a la línea de comandos de Windows. :)
deed02392
Use Windows Easy Transfer para transferir la configuración de su sistema, está integrado en Windows 7-Vista y se puede descargar para XP ... microsoft.com/download/en/details.aspx?id=7349
Moab
Esa no es una opción ya que la instalación original de Windows ya no está disponible.
deed02392
Ver también stackoverflow.com/q/212906/10245
Tim Abell el

Respuestas:

64

Use Ftype & Assoc para arreglar esto (y es programable).

Use Assoc para obtener el tipo de archivo

>Assoc .txt

te dio:

.txt = archivo txt

Luego

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

Una vez que sepa el tipo de archivo, puede usar Ftype para asociarlo con una acción.

Esto funcionaría para archivos .php (simplemente póngalos en un archivo por lotes)

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

Y puede copiar estas líneas para agregar otros archivos basados ​​en texto como desee.

uSlackr
fuente
1
Interesante, cuando lo hago >assoc .phpdice que no tiene asociación de archivos? Parece que lo que se configura cuando especifica un programa predeterminado para abrir un tipo de archivo no está 'registrado' de esta manera. ¿Por qué podría ser eso?
deed02392
18
+1 para dos herramientas de línea de comandos que no sabía que existían.
Ian Boyd
1
Esta solución hace que los archivos de texto se abran en notepad ++ y no en el programa previamente asignado (notepad). No abrirá Notepad ++ cuando haga clic en una extensión de archivo nueva y no registrada (por ejemplo, pl, py o c) como solicitó el remitente.
Richard
1
@ deed02392 puede agregar una nueva asociación con la asociación 'Assoc .php = phpfile' debería funcionar
uSlackr
2
La intención de mi respuesta fue mostrarle cómo usar assoc & ftype, no escribir el archivo por lotes para usted. Pero seguiré jugando
uSlackr
5

Aquí hay un script que funcionó para mí en 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 ""
}
  • Debe ejecutarse en una ventana de PowerShell de administrador (elevada).
  • Explorer se actualizó inmediatamente y mostró nuevos iconos de archivo.

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

Gracias a las otras respuestas por la información que necesitaba para que esto funcionara.

Tim Abell
fuente
3

Como mínimo, debe crear una clave de registro que proporcione a notepad ++ una ID y ruta y luego una para cada extensión que desee registrar para usarla.

Para crear la ID y la ruta (verifique los puntos de ruta a la ubicación correcta):

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

y luego sigue repitiendo el siguiente bit, uno para cada extensión (en este ejemplo, .ples para Perl):

[HKEY_CLASSES_ROOT\.pl]
@="notepad_pp"

Guarde este archivo con la extensión .regy ahora debería poder volver a asociar todas las extensiones simplemente haciendo doble clic en este archivo y confirmando que desea importar las entradas en el registro.

Ricardo
fuente
1
Interesante, he estado buscando y parece que lo que hace Windows 7 cuando configura un programa para cargar es crear una entrada en HKCR \ ext_auto_file \ shell \ open \ command con un valor de "C: \ Archivos de programa \ Notepad ++ \ notepad ++ .exe ""% 1 ". ¿De dónde estabas basando el tuyo?
deed02392
Básicamente es lo mismo, solo con ext_auto_file renombrado a algo un poco más significativo y múltiples extensiones de archivo que apuntan a una sola entrada.
Richard