Associar programaticamente extensões de arquivos ao aplicativo no Windows

39

Acabei de reinstalar o Windows recentemente e, na configuração do meu ambiente, notei que todas as minhas associações para as várias linguagens de programação que editei no Notepad ++ foram feitas (naturalmente).

Estou pensando no futuro, não seria ótimo ter algum tipo de arquivo em lote que pudesse associar automaticamente uma seleção de extensões de arquivo ao N ++ com o clique de um botão, em vez de ter que esperar até encontrar todas essas extensões? atravesse a ladainha de navegar para o N ++ exe etc.

Eu não posso fazer isso com o Default Programs utilitário que vem com o Windows 7, porque ele só funciona com extensões que foram "encontradas".

Então, é possível associar programaticamente as extensões de arquivos ao aplicativo no Windows?

deed02392
fonte
A solução tem que ser powershell como por sua tag?
Richard
1
Nada, apenas tentando obter o interesse dos viciados em linha de comando do Windows. :)
deed02392
Use a Transferência Fácil do Windows para transferir as configurações do sistema, é embutido no Windows 7-Vista e pode ser baixado para o XP ... microsoft.com/download/en/details.aspx?id=7349
Moab
Isso não é uma opção, já que a instalação original do Windows não está mais disponível.
deed02392
Veja também stackoverflow.com/q/212906/10245
Tim Abell

Respostas:

59

Use Ftype & amp; Assoc para corrigir isso (e é scriptable).

Use Assoc para obter o tipo de arquivo

>Assoc .txt

da-te:

.txt = arquivo de texto

Então

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

Depois de conhecer o tipo de arquivo, você pode usar o Ftype para associá-lo a uma ação.

Isso funcionaria para arquivos .php (basta plop-los em um arquivo de lote)

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

E você pode copiar essas linhas para adicionar outros arquivos baseados em texto como você gostaria.

uSlackr
fonte
18
+1 para duas ferramentas de linha de comando que eu não sabia que existiam.
Ian Boyd
1
Esta solução faz com que arquivos de texto sejam abertos no notepad ++ e não no programa previamente designado (notepad). Ele não fará com que o notepad ++ seja aberto quando você clicar em uma nova extensão de arquivo não registrada (por exemplo, pl, py ou c) como o remetente perguntou.
Richard
1
@ deed02392 você pode adicionar uma nova associação com assoc 'Assoc .php = phpfile' deve funcionar
uSlackr
1
O bit "algum tipo de arquivo em lote que poderia associar automaticamente uma seleção de extensões de arquivo com o N ++" - embora possa ter sido mal entendido!
Richard
2
A intenção da minha resposta foi mostrar como usar o assoc & amp; ftype, para não escrever o arquivo de lote para você. Mas eu vou tocar junto
uSlackr
2

No mínimo, você precisa criar uma chave de registro que forneça ao notepad ++ um ID e caminho e, em seguida, um para cada extensão que você deseja registrar para usá-lo.

Para criar o ID e o caminho (verifique o caminho aponta para o local correto):

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 continue repetindo o próximo bit, um para cada extensão (neste exemplo, .pl é para Perl):

[HKEY_CLASSES_ROOT\.pl]
@="notepad_pp"

Salve este arquivo com a extensão .reg e agora você deve ser capaz de associar novamente todas as extensões apenas clicando duas vezes nesse arquivo e confirmando que deseja importar as entradas no registro.

Richard
fonte
1
Interessante, eu tenho procurado e parece que o Windows 7 faz quando você define um programa para carregar é criar uma entrada no comando HKCR \ ext_auto_file \ shell \ open \ com um valor de "C: \ Arquivos de Programas \ Notepad ++ \ notepad ++ .exe ""% 1 ". De onde você estava se baseando?
deed02392
É basicamente o mesmo, apenas com ext_auto_file renomeado para algo um pouco mais significativo e várias extensões de arquivos apontando para uma única entrada.
Richard
2

Aqui está um script que funcionou para mim no 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 ""
}
  • Precisa ser executado em um windows admin powershell.
  • Explorer imediatamente atualizado e mostrou novos ícones de arquivo.

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

Graças a outras respostas para a informação que eu precisava para fazer este trabalho.

Tim Abell
fonte