[分享] Windows 指令: assoc 與 ftype - 討論區

[分享] Windows 指令: assoc 與 ftype

文章瀏覽次數 1976 文章回覆數 8

coscell

coscell圖像(預設)

2020-03-06 08:29:23

From:180.176.111.5

平常我們用檔案總管瀏覽檔案,碰到 .txt 按 ENTER 會自動用記事本打開;
碰到 .mp3 按 ENTER 會自動打開某個媒體播放軟體來播放等等。
這種機制稱為檔案關聯,這種關聯性可以任由我們自由刪除、修改和新增。
我們用指令列來操作,邏輯觀念就會很清晰。
其實他是由檔案附檔名關連到檔案類型,再由檔案類型關連到應用軟體。

首先 assoc (association) 指令用來關聯副檔名與檔案類型。
執行 assoc 不佳任何參數會列出目前系統預設的全部附檔名與檔案類型的關聯,像這樣:
assoc

以上指令輸出內容很多,如果有興趣詳細查閱,可用以下兩個指令:
assoc|more
這樣只會顯示一頁,可以按空白鍵煥業來逐頁瀏覽,按 ENTER 逐行捲動,按 Q 結束顯示。

assoc>output.txt
這樣會把輸出內容導入 output.txt 再用記事本慢慢審閱。

如果只想知道某個副檔名的類型例如:
assoc .txt
會看到
.txt=txtfile

如果要取消這種關聯性就執行
assoc .txt=

要變更類型:
assoc .txt=PlainText

接著就來介紹 ftype (filetype) 指令,同樣只執行
ftype
會列出全部的檔案類型與應用程式的關聯。

接著我們執行
ftype txtfile
顯示
txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1

看到靠近最後的 NOTEPAD.EXE 了嗎?這就是記事本的執行檔名稱。= 後面就是應用程式執行檔的所在路徑,
%SystemRoot% 這個環境變數指向 C:\Windows, \ 是資料夾層級的分隔符號,
由此我們看出 notepad.exe 位於 C:\Windows\system32 資料夾下。
有沒有發現學習指令列操作可以讓我們知道許多電腦運作的細節?
最後的 %1 代表 notepad 指令的第一個參數,也就是您在檔案總管按 ENTER 的檔名。
從這裡我們又學到一點:其實要用記事本打開檔案可以直接按 WINDOWS+R 接著輸入 notepad 資料夾\檔案.txt
是不是很有效率?

ftype 取消漢變更檔案類型與應用程式的關聯操作方式與 assoc 相同。
最後舉個實例說明創造關聯的操作。

假設我寫了一個播放軟體用來播放 .abc 這種樂譜檔案。
首先我執行
assoc .abc
系統顯示找不到副檔名 .abc 的檔案關聯
所以我要自己創造:
assoc .abc=abcmidi
ftype abcmidi=c:\abc\abcplay %1
以後只要我瀏覽到 .abc 檔案按 ENTER 就能呼叫 abcplay 來播放。

留言

#1

阿慶

阿慶圖像

2020-03-06 18:11:04

From:122.116.71.150

原來這也有指令可以用喔!
突然覺得自己對 Windows 還很不熟悉啊XD

#2

特種兵

特種兵圖像(預設)

2020-03-07 16:47:19

From:1.161.134.251

不過必須先去查好程式的路徑
以及哪一支執行檔才是主程式,因為在一個應用程式中可能有很多支執行檔

#3

阿慶

阿慶圖像

2020-03-07 17:53:16

From:122.116.71.150

之前看到 .gitignore 這個檔案,發現檔案類型總說是文字文件,覺得奇怪。
查了一下:

C:\>assoc .gitignore
.gitignore=txtfile

不知道是哪個城市幫我新增的,或者也可能我開啟檔案時選了記事本,它就記住了。
Windows 似乎總愛自作聰明,幫我判定這是某種檔案。
不過要是不聰明點,大概就沒那麼多使用者想用它了XD

#4

阿慶

阿慶圖像

2020-03-07 17:54:06

From:122.116.71.150

季的我之前再 Linux 用過類似檔案總管的東西,
通常來講 Linux 沒有副檔名的概念,或者說附檔名並不影響檔案如何開啟
但沒有附檔名的文字文件,它會提示文字文件,系統是怎麼知道的
這我就不清楚了

#5

coscell

coscell圖像(預設)

2020-03-07 19:00:44

From:180.176.111.5

美一種檔案都有獨特的檔頭資訊,例如 MIDI 檔案開頭都有 MThd 四個符號,
rtf 開頭都有 {\rtf1\ansi 之類的。

#6

阿慶

阿慶圖像

2020-03-07 22:16:51

From:122.116.71.150

你說的事不是像

#!/usr/bin/env python

這樣他就知道用 python 執行了

不過感覺似乎也不向,「檔頭」應該不是打開編輯器看到的檔案開頭那麼簡單XD
上面那個只是文字檔的開頭,告訴解意器要用哪個解釋他
那比如二進位檔怎麼判斷,總不是用文字編輯器來改吧
看來檔頭不是想編輯就編輯的?

#7

coscell

coscell圖像(預設)

2020-03-08 07:30:46

From:180.176.111.5

我在回答你沒有副檔名 linux 如何判斷檔案類型的問題,
你把它跟別的問題搞在一起當然就一片混亂。

#8

特種兵

特種兵圖像(預設)

2020-03-08 08:49:43

From:1.161.134.251

python的chardet函式庫就是利用檔頭資訊來判斷檔案類型的
可以以二進位方式讀入檔案前面的檔頭資訊來判斷
但讀入整個檔案是最準確的