Mengaitkan ekstensi file secara terprogram dengan aplikasi pada Windows

44

Saya baru saja menginstal ulang Windows dan dalam mengatur lingkungan saya, saya telah memperhatikan bahwa semua asosiasi saya untuk berbagai bahasa pemrograman yang saya edit di Notepad ++ telah hilang (secara alami).

Saya berpikir untuk masa depan, bukankah besar untuk memiliki semacam file batch yang secara otomatis dapat mengaitkan pilihan ekstensi file dengan N ++ di klik tombol, daripada harus menunggu sampai saya menemukan semua ekstensi ini maka pergi melalui kesulitan menavigasi ke N ++ exe dll.

Saya tidak bisa melakukan ini dengan Default Programsutilitas yang datang dengan Windows 7, karena hanya berfungsi dengan ekstensi yang telah 'dijumpai'.

Jadi mungkinkah secara sistematis mengaitkan ekstensi file dengan aplikasi pada Windows?

akta02392
sumber
Apakah solusinya harus PowerShell sesuai tag Anda?
Richard
1
Tidak sama sekali, hanya mencoba untuk mendapatkan minat dari pecandu baris perintah Windows. :)
deed02392
Gunakan Windows Easy Transfer untuk mentransfer pengaturan sistem Anda, yang terintegrasi ke dalam Windows 7-Vista dan dapat diunduh untuk XP ... microsoft.com/download/en/details.aspx?id=7349
Moab
Itu bukan pilihan karena instalasi Windows asli tidak tersedia lagi.
deed02392
Lihat juga stackoverflow.com/q/212906/10245
Tim Abell

Jawaban:

64

Gunakan Ftype & Assoc untuk memperbaikinya (dan bisa skrip).

Gunakan Assoc untuk mendapatkan filetype

>Assoc .txt

Memberi anda:

.txt = txtfile

Kemudian

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

Setelah Anda mengetahui jenis file, Anda dapat menggunakan Ftype untuk mengaitkannya dengan tindakan.

Ini akan bekerja untuk file .php (cukup masukkan dalam file batch)

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

Dan Anda dapat menyalin garis-garis ini untuk menambahkan file berbasis teks lainnya yang Anda inginkan.

uSlackr
sumber
1
Menarik, ketika saya >assoc .phpmengatakan itu tidak memiliki asosiasi file? Tampaknya apa yang sudah diatur ketika Anda menentukan program default untuk membuka jenis file tidak 'terdaftar' dengan cara ini. Kenapa bisa begitu?
deed02392
18
+1 untuk dua alat baris perintah yang saya tidak tahu ada.
Ian Boyd
1
Solusi ini membuat file teks terbuka di notepad ++ dan bukan program yang ditetapkan sebelumnya (notepad). Ini tidak akan membuat notepad ++ terbuka ketika Anda mengeklik ekstensi file yang baru, tidak terdaftar, (mis. Pl, py, atau c) seperti yang diajukan pengirim.
Richard
1
@ deed02392 Anda dapat menambahkan asosiasi baru dengan assoc 'Assoc .php = phpfile' seharusnya berfungsi
uSlackr
2
Maksud dari jawaban saya adalah untuk menunjukkan kepada Anda bagaimana menggunakan assoc & ftype, bukan untuk menulis file batch untuk Anda. Tapi saya akan bermain bersama
uSlackr
5

Berikut ini skrip yang berfungsi untuk saya di 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 ""
}
  • Perlu dijalankan di jendela powershell administrator (tinggi).
  • Explorer segera disegarkan dan menunjukkan ikon file baru.

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

Terima kasih atas jawaban lain untuk informasi yang saya butuhkan untuk membuat pekerjaan ini.

Tim Abell
sumber
3

Minimal, Anda perlu membuat satu kunci registri yang memberikan notepad ++ ID dan jalur dan kemudian satu untuk setiap ekstensi yang ingin Anda daftarkan untuk menggunakannya.

Untuk membuat ID dan jalur (periksa titik jalur ke lokasi yang benar):

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

dan kemudian terus mengulangi bit berikutnya, satu untuk setiap ekstensi (dalam contoh ini, .pluntuk Perl):

[HKEY_CLASSES_ROOT\.pl]
@="notepad_pp"

Simpan file ini dengan ekstensi .regdan sekarang Anda seharusnya dapat mengaitkan kembali semua ekstensi hanya dengan mengklik dua kali pada file ini dan mengonfirmasi Anda ingin mengimpor entri ke dalam registri.

Richard
sumber
1
Menarik, saya telah mencari dan tampaknya apa yang dilakukan Windows 7 ketika Anda mengatur program untuk memuat adalah membuat entri dalam perintah HKCR \ ext_auto_file \ shell \ open \ dengan nilai "C: \ Program Files \ Notepad ++ \ notepad ++ .exe ""% 1 ". Dari mana asalmu?
deed02392
Ini pada dasarnya sama, hanya dengan ext_auto_file diganti namanya menjadi sesuatu yang sedikit lebih bermakna dan beberapa ekstensi file menunjuk ke satu entri tunggal.
Richard