Programowo kojarz rozszerzenia plików z aplikacjami w systemie Windows

44

Niedawno ponownie zainstalowałem system Windows i konfigurując środowisko zauważyłem, że wszystkie moje skojarzenia dla różnych języków programowania edytowanych w Notepad ++ zniknęły (oczywiście).

Myślę o przyszłości, czy nie byłoby wspaniale mieć jakiś plik wsadowy, który mógłby automatycznie kojarzyć wybrane rozszerzenia plików z N ++ jednym kliknięciem przycisku, zamiast czekać, aż napotkam wszystkie te rozszerzenia przejść przez rigmarole nawigacji do exe N ++ itp.

Nie mogę tego zrobić za pomocą Default Programsnarzędzia dostarczanego z systemem Windows 7, ponieważ działa ono tylko z „napotkanymi” rozszerzeniami.

Czy można zatem programowo powiązać rozszerzenia plików z aplikacjami w systemie Windows?

deed02392
źródło
Czy rozwiązaniem musi być PowerShell zgodnie z tagiem?
Richard
1
Wcale nie, po prostu staram się zdobyć zainteresowanie ćpunów z linii poleceń Windows. :)
deed02392
Użyj narzędzia Łatwy transfer w systemie Windows, aby przenieść ustawienia systemu, jest ono wbudowane w system Windows 7-Vista i można je pobrać na XP ... microsoft.com/download/en/details.aspx?id=7349
Moab
To nie jest opcja, ponieważ oryginalna instalacja systemu Windows nie jest już dostępna.
deed02392
Zobacz także stackoverflow.com/q/212906/10245
Tim Abell

Odpowiedzi:

64

Użyj Ftype & Assoc, aby to naprawić (i jest to skryptowalne).

Użyj Assoc, aby uzyskać typ pliku

>Assoc .txt

daje Ci:

.txt = plik txt

Następnie

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

Gdy znasz typ pliku, możesz użyć Ftype, aby powiązać go z akcją.

To działałoby w przypadku plików .php (wystarczy umieścić je w pliku wsadowym)

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

I możesz skopiować te linie, aby dodać inne pliki tekstowe, jak chcesz.

uSlackr
źródło
1
Ciekawe, kiedy to robię >assoc .php, mówi, że nie ma powiązania plików? Wydaje się, że to, co jest skonfigurowane, gdy określisz domyślny program do otwierania typu pliku, nie jest „rejestrowane” w ten sposób. Dlaczego to może być?
deed02392
18
+1 za dwa narzędzia wiersza poleceń, o których istnieniu nie wiedziałem.
Ian Boyd
1
To rozwiązanie powoduje, że pliki tekstowe otwierają się w Notatniku ++, a nie w wcześniej przypisanym programie (Notatniku). Nie spowoduje otwarcia Notatnika ++ po kliknięciu nowego, niezarejestrowanego rozszerzenia pliku (np. Pl, py lub c), tak jak poprosił nadawca.
Richard
1
@ deed02392 możesz dodać nowe skojarzenie z assoc „Assoc .php = phpfile” powinno działać
uSlackr
2
Moja odpowiedź miała na celu pokazać, jak używać assoc i ftype, a nie pisać dla ciebie pliku wsadowego. Ale zagram razem
uSlackr
5

Oto skrypt, który zadziałał dla mnie w systemie 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 ""
}
  • Musi być uruchomiony w oknie PowerShell administratora (z podwyższonym poziomem uprawnień).
  • Explorer natychmiast odświeżył i pokazał nowe ikony plików.

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

Dzięki innym odpowiedziom na informacje potrzebne do tego, aby to zadziałało.

Tim Abell
źródło
3

Co najmniej musisz utworzyć jeden klucz rejestru, który daje Notatnikowi ++ identyfikator i ścieżkę, a następnie jeden dla każdego rozszerzenia, które chcesz zarejestrować, aby z niego korzystać.

Aby utworzyć identyfikator i ścieżkę (sprawdź, czy ścieżka wskazuje prawidłową lokalizację):

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

a następnie powtarzaj kolejny bit, po jednym dla każdego rozszerzenia (w tym przykładzie .pljest dla Perla):

[HKEY_CLASSES_ROOT\.pl]
@="notepad_pp"

Zapisz ten plik z rozszerzeniem .regi powinieneś być w stanie ponownie powiązać wszystkie rozszerzenia, klikając dwukrotnie ten plik i potwierdzając, że chcesz zaimportować wpisy do rejestru.

Richard
źródło
1
Interesujące, szukałem i wydaje się, że to, co robi Windows 7 po ustawieniu programu do ładowania, to utworzenie wpisu w poleceniu HKCR \ ext_auto_file \ shell \ open \ z wartością „C: \ Program Files \ Notepad ++ \ notepad ++ .exe „”% 1 ”. Skąd bazowałeś na swoim?
deed02392
Zasadniczo jest tak samo, tylko z nazwą pliku ext_auto_file zmienioną na coś nieco bardziej znaczącego i wieloma rozszerzeniami plików wskazującymi na jeden wpis.
Richard