[Windows]Windows路徑探究

來源:互聯網
上載者:User

Windows路徑是我們經常使用的東西,它看似簡單,實際上隱含許多細節,這些都是在平常的使用過程中注意不到的。下面讓我們來看看各種各樣的Windows路徑。

 

提起路徑,我們都會想到“絕對路徑”和“相對路徑”,實際上絕對路徑是一個廣泛的概念,它表示的是可以唯一定位一個檔案或檔案夾的路徑,有多種形式的路徑都屬於絕對路徑的範疇,例如:

完整路徑(Full path)

我們平時所說的“絕對路徑”通常就是指完整路徑,它的格式如下:
C:\Windows\System32\calc.exe

UNC(Universal Naming Convention通用命名規範)路徑

UNC路徑用於在區域網路上定位檔案或檔案夾,在通過網路位置訪問其它系統上的共用檔案時使用的就是UNC路徑。UNC路徑的格式如下:
\\PC101\ShareFiles\job.doc
其中PC101是目標系統的電腦名稱,ShareFiles是目標系統上的共用資料夾名稱。

以\\?\開頭的路徑

在某些手工輔助殺毒的工具中可以看到以\\?\開頭的路徑,這種路徑我還找不到正式的名稱。完整路徑和UNC路徑都可以以\\?\開頭:
\\?\C:\Windows\System32\calc.exe
\\?\UNC\PC101\ShareFiles\job.doc

相對路徑(Relative path)

上面四種路徑都可以在本地或網路上絕對位置一個檔案,因此屬於絕對路徑。另一種我們常常使用的是相對路徑,這種路徑需要與進程的當前檔案夾(Current directory)一起合作才可以定位一個檔案或檔案夾。進程的當前檔案夾並不是指EXE檔案所在的檔案夾,它是每個進程都有的一個屬性。例如在命令提示字元中顯示的路徑就是這個cmd.exe進程的當前檔案夾,使用cd命令可以改變當前檔案夾,無論當前檔案夾如何改變,cmd.exe檔案所在的檔案夾總是不變的。在進程啟動的時候可以指定它的當前檔案夾,例如在捷徑的屬性中有一個“起始位置”輸入框,這個就是進程啟動後的當前檔案夾。如果在啟動時不指定進程的當前檔案夾(直接雙擊EXE檔案的情況),那麼EXE檔案的所在檔案夾就會作為它的當前檔案夾。

 

純粹的相對路徑格式如下:

Windows\System32\calc.exe
要注意的是相對路徑的開頭不能有\,很多人以為有沒有\都是一樣的,其實不然,以\開頭的路徑是另外一種路徑,下文會詳細介紹這種路徑。

 

如果在進程中操作檔案時傳遞一個相對路徑,那麼進程會將當前檔案夾的路徑與這個相對路徑合并,得到一個完整路徑。例如命令提示字元的當前檔案夾是C:\Windows,如果執行start System32\calc.exe命令,程式就會將兩個路徑合并得到C:\Windows\System32\calc.exe。
由於這樣的特性,當前檔案夾又稱為工作資料夾,因為進程使用相對路徑時都是針對該檔案夾的。

 

除了上面所說的純粹的相對路徑,還有兩種特殊的相對路徑,為了不至於混淆,不再將它們稱為相對路徑。

以\開頭的路徑

上面說過相對路徑不能以\開頭,一旦如此,它就表示相對於當前檔案夾根目錄的路徑。例如進程的當前檔案夾是C:\Windows,那麼\System32\calc.exe就表示C:\System32\calc.exe。不論當前檔案夾的路徑有多深,只取根目錄進行合并。可以在命令提示字元中進行驗證:首先將C:\Windows設定為當前檔案夾,然後執行start \System32\calc.exe命令,將會提示錯誤,所找不到檔案。再執行start \Windows\System32\calc.exe命令,這時計算機程式成功啟動了,證明了上面的說法。

以盤符和冒號開頭的路徑

這種路徑就像是拼字錯誤的完整路徑,它的格式如下:
C:System32\calc.exe

盤符加冒號是一種特殊的標記法,表示的是進程在“該分區上的當前檔案夾”。這裡又蹦出來了一個當前檔案夾,這與上文的當前檔案夾是不同的。簡單來說,對於每一個分區,進程都會儲存在這個分區上最後使用的當前檔案夾。可能解析的不夠好,那麼可以使用命令提示字元來操作一遍以加深理解。

 

運行cmd,執行cd /d C:\Windows\System32命令進入該檔案夾,然後切換到其它的分區,再執行C:calc.exe命令,可以看到計算機程式啟動了。

 

我們在執行cd命令進入C:\Windows\System32檔案夾後,進程便以此為當前檔案夾,當切換到其餘的分區時,進程先將這個檔案夾的路徑儲存起來,再進行切換。使用盤符和冒號的形式讀取指定分區上的當前檔案夾。

路徑中的限制

除了路徑格式上的限制,還有很多字元上的限制,下面一一來看看各種路徑有什麼限制。

 

除了以\\?\開頭的路徑之外,其它路徑的長度都不能超過260個字元(包括結尾的\0字元),而\\?\開頭的路徑長度可以達到約32000個字元(系統在處理\\?\首碼的時候可能將它擴充成更長的字串)。網路上流傳的一則技巧:檔案路徑太長而不能被刪除,可以在執行del命令時在路徑前加上\\?\首碼。

 

檔案或檔案夾名稱的最後一個字元不可為空格或句點。但在路徑中,最後一個字元可以為句點,因為路徑中的句點表示的是當期檔案夾(這與上文的當前檔案夾完全不同),兩個句點表示的是上一級檔案夾。以\\?\開頭的路徑中不能使用句點表示當前檔案夾或上一級檔案夾,在資源管理員的地址欄中雖然可以這麼做,那是因為資源管理員對其作了處理。

 

檔案或檔案夾名稱不能包含的字元 :
< > : " / \ | ? *
在路徑中可以使用 : \ ?,冒號是與盤符一起使用的,問號是\\?\首碼中特有的,除此之外不能出現這兩個字元;而\是檔案夾分割符。雖然我們也能使用/作為分隔字元,實際上這是不允許的,系統在處理路徑時會將/替換成\。另外,如果路徑最後一個字元是\,那麼該路徑表示的是檔案夾;否則表示的是一個檔案。

 

UNC路徑的電腦名稱部分不能出現以下字元:
` ~ ! @ # $ % ^ & * ( ) = + _ [ ] { } \ | ; : . ‘ “ , < > / ?
確實是夠多的了,實際上標準的電腦名稱推薦只使用26個英文字母、10個數字以及-(連字號),否則可能會出現找不到電腦的情況。在更改電腦名稱的時候如果出現非標準字元,系統會作出提示。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.