如何在 C:\ 中建立一個資料夾,使其具有與「C:\Program Files」相同的短名稱?

如何在 C:\ 中建立一個資料夾,使其具有與「C:\Program Files」相同的短名稱?

NTFS 中的短名稱是 DOS 系統的相容性功能,僅支援 8.3 檔案名稱(<8 個字元名稱>.<3 個字元副檔名>)。我們可以使用 . 來取得目前目錄中檔案/資料夾的短名稱dir /x

「C:\Program Files」的簡稱為「PROGRA~1」。資料夾應該命名為“PROGRA~1”,“C:\Program Files”變成“PROGRA~2”?

我嘗試了“Program Filas”、“Program Fil”、“Program File”,但沒有成功。我還嘗試將創建、修改、最後寫入時間設定為較舊的時間:

$(Get-Item "Program Filas").creationtime=$(Get-Date "01/01/2000 00:01 am")
$(Get-Item "Program Filas").lastaccesstime=$(Get-Date "01/01/2000 00:01 am")
$(Get-Item "Program Filas").lastwritetime=$(Get-Date "01/01/2000 00:01 am")

答案1

PROGRA~1只要您已經有另一個名為該目錄的目錄,它就永遠不會變得如此。

簡稱是執著的– 它們是在建立物件時選擇的,並像常規名稱一樣儲存在檔案系統中。一旦分配了名稱,字母順序和修改時間戳都不會導致名稱變更。 (畢竟,他們應該工作就像常規名稱一樣,其中包括名稱不會突然自行更改。

Win32 API有一個函數設定檔案短名()它允許您直接更改任何路徑的 8.3 名稱,因此編寫一個簡短的程式(或使用 Python ctypes 等)來執行此更改。

(將「Program Files」的短名稱更改為自訂名稱後,您可以建立一個按字面名稱命名的目錄(PROGRA~1如果程式需要的話)。您不需要設計一個特殊的名稱來欺騙演算法。)

或者,您可以將“Program Files”重新命名為“asdf”,從而釋放其短名稱。然後,一旦您的目錄聲明了“PROGRA~1”,請將真正的目錄重新命名回“Program Files”,它將被分配給~2。

相關內容