2026年6月10日

windows 11, 如何以簡單的 script 一次設定一堆副檔名的程式如 windows 95 的 HKEY_ROOT\xxxxx ?

 在 Windows 11 中,微軟為了安全防護(防止惡意軟體私自篡改預設程式),已經無法像 Windows 95 那樣,單純透過修改 HKEY_CLASSES_ROOT 登錄檔(Registry)就直接改變預設關聯。現在如果直接改登錄檔,系統會因為雜湊值(Hash)不符而失效或跳出重設提示。

目前最簡單、有效且不需要第三方工具的大量設定方法,是使用 Windows 內建的 PowerShell 指令搭配 XML 設定檔
以下是操作步驟:
🛠️ 步驟一:導出目前的設定範本
先用一指令,把目前的檔案關聯匯出成一個 XML 檔案。
  1. 在開始功能表對著「PowerShell」按右鍵,選擇以系統管理員身分執行
  2. 輸入以下指令並按 Enter:
    powershell
    Dism /Online /Export-DefaultAppAssociations:"C:\AppAssoc.xml"
    
    請謹慎使用程式碼。

📝 步驟二:修改 XML 設定檔
C:\ 磁碟機底下找到 AppAssoc.xml,用「記事本」打開它。
  1. 你會看到很多類似底下的結構:
    xml
    <Association Identifier=".txt" ProgId="txtfile" ApplicationName="Notepad" />
    
    請謹慎使用程式碼。
  2. 進行大掃除:刪除你不需要修改的檔案格式(副檔名),只留下你想大量修改的那些。
  3. 大量修改:把你想設定的副檔名(Identifier)和對應的程式名稱(ProgId)填進去。
    • 小技巧:如果你不知道某個程式的 ProgId 是什麼,可以先手動在 Windows 的「設定」->「應用程式」->「預設應用程式」裡改好一個,再匯出一次 XML 來複製它的 ProgId

🚀 步驟三:用指令一次強制套用
回到管理員權限的 PowerShell 視窗,執行以下指令把改好的 XML 檔套用給系統:
powershell
Dism /Online /Import-DefaultAppAssociations:"C:\AppAssoc.xml"
請謹慎使用程式碼。
  • 生效時間:這個指令會套用到下一次新登入的使用者,或是目前使用者重啟電腦(或重新登入)後生效。

💡 補充:進階工程師玩法(使用開源工具)
如果你需要的是立刻生效,且希望像寫舊式 .bat.reg 那樣一行指令搞定一個副檔名,建議下載微軟官方也常推薦的開源命令列小工具 [SetUserFTA]
下載後,你只需要寫一個簡單的 .bat 批次檔,內容如下就能一次搞定:
cmd
SetUserFTA.exe .txt txtfile
SetUserFTA.exe .mp4 VLC.vlc
SetUserFTA.exe .jpg PhotoViewer.ProgId
請謹慎使用程式碼。
請問你想大量綁定的副檔名(例如:.pdf, .txt)以及目標程式是什麼呢?我可以幫你直接寫好對應的 XML 內容SetUserFTA 指令
以下是你所說的內容:不要 power shell 的 solution
了解,如果您不想使用 PowerShell 或 XML 這種新版的做法,我們可以直接用最傳統的 Windows 批次檔(.bat) 來解決!
雖然 Windows 11 對於預設程式的防護很嚴格,但如果您只是想用簡單的腳本新增自訂的右鍵選單,或是強制用特定程式開啟舊式檔案,我們可以使用傳統的 assocftype 指令。
以下是兩種不需要 PowerShell 的傳統 Script 解決方案:
🛠️ 方法一:使用傳統命令提示字元(.bat 批次檔)
這是最接近 Windows 95 邏輯的做法,使用內建的 assoc(關聯副檔名)與 ftype(指定開啟程式)指令。
  1. 桌面上按右鍵 -> 新增 -> 記事本。
  2. 貼上底下的程式碼(請根據您的需求修改副檔名與程式路徑):
cmd
@echo off
:: 必須以系統管理員身分執行此批次檔

:: 1. 先定義一個「檔案類型」並指定程式路徑(注意:路徑如果有空格要加雙引號)
ftype MyCustomTextReader="C:\Windows\notepad.exe" "%%1"
ftype MyCustomVideoPlayer="C:\Program Files\VLC\vlc.exe" "%%1"

:: 2. 把副檔名綁定到上面定義的檔案類型
assoc .xyz=MyCustomTextReader
assoc .abc=MyCustomTextReader
assoc .mkv=MyCustomVideoPlayer

echo 設定完成!
pause
請謹慎使用程式碼。
  1. 另存新檔為 set_apps.bat(存檔時類型要選「所有檔案」)。
  2. 對著該檔案按右鍵 -> 以系統管理員身分執行
⚠️ 重要備註(Windows 11 的限制):如果該副檔名是 Windows 內建很常見的格式(如 .txt 或 .mp4),系統可能還是會跳出提示問你「要用哪一個程式開啟」。但如果是您自己定義的特殊副檔名(如 .xyz),這個方法非常完美。

🗂️ 方法二:直接寫傳統登錄檔(.reg 檔案)
如果您希望做到像 Windows 95 那樣,直接在登錄檔建立類似 HKEY_CLASSES_ROOT 的結構,您可以改寫在 HKEY_CURRENT_USER\Software\Classes 底下。這樣做完全不需要管理員權限,而且不會被系統拒絕。
  1. 打開記事本,貼上以下內容:
reg
Windows Registry Editor Version 5.00

; --- 設定 .xyz 副檔名指向 MyReader ---
[HKEY_CURRENT_USER\Software\Classes\.xyz]
@="MyReader"

; --- 設定 .abc 副檔名也指向 MyReader ---
[HKEY_CURRENT_USER\Software\Classes\.abc]
@="MyReader"

; --- 定義 MyReader 這個類別要用什麼程式開 ---
[HKEY_CURRENT_USER\Software\Classes\MyReader\shell\open\command]
@="\"C:\\Windows\\notepad.exe\" \"%1\""
請謹慎使用程式碼。
  1. 另存新檔為 set_apps.reg(存檔類型選「所有檔案」)。
  2. 點兩下執行這個 .reg 檔案,全部按「是」即可。
請問您要一次設定的副檔名(例如 .txt、.myext)有哪些?而您希望用來開啟它們的程式路徑又是什麼呢?我可以幫您直接寫好完整的 .bat 批次檔內容讓您直接複製使用!
以下是你所說的內容:ftype 與 assoc 是什麼?
assocftype 是 Windows 系統裡面的兩個老牌命令列工具。它們從 Windows NT 時代(大約 30 年前)就存在了,兩者必須互相搭配才能工作。
簡單來說:assoc 負責認貼紙,ftype 負責認工人。

🏷️ 1. assoc (Association - 檔案關聯)
這個指令用來告訴系統:某個副檔名,屬於哪一種「檔案類型」。
它只負責連線,不負責開程式。
  • 舉例:告訴系統「.txt 這種副檔名,叫做 txtfile(文字檔案)」。
  • 指令長這樣assoc .txt=txtfile

🛠️ 2. ftype (File Type - 檔案類型命令)
這個指令用來告訴系統:某一種「檔案類型」,要用哪一個程式路徑來打開。
  • 舉例:告訴系統「只要遇到 txtfile(文字檔案),就用 notepad.exe(記事本)打開它」。
  • 指令長這樣ftype txtfile="C:\Windows\notepad.exe" "%1"

🔄 運作連環圖(以打開 .txt 為例)
當你點兩下一個 test.txt 檔案時,系統在背後是這樣找答案的:
  1. 系統問:使用者點了 .txt,這是什麼檔案?
  2. assoc 回答:報告系統,.txttxtfile 種類。
  3. 系統問:那 txtfile 該用什麼程式開?
  4. ftype 回答:報告系統,請用 C:\Windows\notepad.exe 打開。
  5. 結果:記事本成功啟動,並讀取該檔案。

❓ 為什麼要分兩個指令,不直接綁定?
因為這樣設計最省事
假設你有 10 個不同的副檔名(.txt, .log, .ini, .cfg ...),它們通通都要用記事本打開。
  • 如果直接綁定:程式路徑換了,你得改 10 次。
  • 使用這套組合:你只要用 assoc 把這 10 個副檔名通通貼上 txtfile 的貼紙。以後更換成新程式時,你只需要用 ftype 改一次 txtfile 的設定,10 個副檔名就一次全部換好了!
你想試試看用這兩個指令來查詢你電腦裡的檔案設定嗎?例如我可以教你如何查詢某個副檔名目前被綁到哪裡
以下是你所說的內容:我需要分別設定 open edit 與其它開啟方式的寫法呢?
在傳統的 Windows 架構中(也就是 assocftype.reg 的邏輯),要分開設定 open(開啟)、edit(編輯)或其他自訂選單(例如「用某程式播放」),關鍵在於建立不同的「動作名稱」(Verbs)
當你對檔案按右鍵時,選單上的選項就是由這些動作決定的。
以下為您提供 .bat 批次檔.reg 登錄檔兩種寫法:
🛠️ 寫法一:使用傳統 .bat 批次檔(最簡單)
使用 ftype 時,只要在檔案類型名稱後面加上 \shell\動作名稱,就可以分開定義不同的開啟方式。
cmd
@echo off
:: 必須以系統管理員身分執行

:: 1. 定義預設的「open」(點兩下或按右鍵「開啟」時的程式)
ftype MyCustomFile\shell\open\command="C:\Program Files\VLC\vlc.exe" "%%1"

:: 2. 定義右鍵選單的「edit」(按右鍵「編輯」時的程式)
ftype MyCustomFile\shell\edit\command="C:\Windows\notepad.exe" "%%1"

:: 3. 定義其他自訂的開啟方式(例如:右鍵選單多一個「用瀏覽器看」)
ftype MyCustomFile\shell\ViewInChrome\command="C:\Program Files\Google\Chrome\Application\chrome.exe" "%%1"

:: 4. 把一堆副檔名通通貼上這個標籤
assoc .xyz=MyCustomFile
assoc .abc=MyCustomFile

echo 設定完成!
pause
請謹慎使用程式碼。

🗂️ 寫法二:使用 .reg 登錄檔(最像 Windows 95)
如果您想直接寫入登錄檔的 HKEY_CURRENT_USER(完全不需要管理員權限),格式會長這樣。這種寫法還可以自訂右鍵選單顯示的中文名稱
reg
Windows Registry Editor Version 5.00

; --- 1. 把副檔名指向你的自訂檔案類別 ---
[HKEY_CURRENT_USER\Software\Classes\.xyz]
@="MyCustomFile"

[HKEY_CURRENT_USER\Software\Classes\.abc]
@="MyCustomFile"

; --- 2. 設定「open」(點兩下的主要程式) ---
[HKEY_CURRENT_USER\Software\Classes\MyCustomFile\shell\open\command]
@="\"C:\\Program Files\\VLC\\vlc.exe\" \"%1\""

; --- 3. 設定「edit」(右鍵選單的編輯) ---
[HKEY_CURRENT_USER\Software\Classes\MyCustomFile\shell\edit\command]
@="\"C:\\Windows\\notepad.exe\" \"%1\""

; --- 4. 設定自訂開啟方式(右鍵顯示「使用 Chrome 開啟」) ---
; MUIVerb 用來決定右鍵選單畫面上看到的文字,不寫的話就會直接顯示選單代碼
[HKEY_CURRENT_USER\Software\Classes\MyCustomFile\shell\ViewInChrome]
"MUIVerb"="使用 Chrome 開啟"

[HKEY_CURRENT_USER\Software\Classes\MyCustomFile\shell\ViewInChrome\command]
@="\"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe\" \"%1\""
請謹慎使用程式碼。
💡 必知小細節
  1. 指令與登錄檔的百分比符號
    • .bat 批次檔中,代入檔案路徑的參數要寫兩個百分比 %%1
    • .reg 登錄檔中,只要寫一個百分比 "%1"
  2. 預設動作:如果你的檔案類別(例如 MyCustomFile)底下同時有 open 和 edit,Windows 預設在點兩下時會去執行 open
您目前打算安排在右鍵選單上的自訂選項名稱(例如:「用小畫家看」、「備份此檔案」)有哪些呢?我可以幫您把精準的程式路徑與名稱直接填進腳本裡!

沒有留言: