我有一個程式需要存取我安裝在「我的文件」資料夾中的 C++ 編譯器 - 例如說 d:\My Documents
程式無法處理路徑中的空格,並且路徑已用雙引號引起來。我嘗試使用dir /x
和找出短名稱for %I in (.) do echo %~sI
。這僅傳回“我的文檔”的全名。我也嘗試過,%userprofile%\documents
但程式無法識別這一點。
為什麼我無法使用此命令獲取該資料夾的短名稱?是否有其他方法來獲取短名稱或可能的截斷?
答案1
您可能正在查看連結或快捷方式。
“我的文檔”的預設位置是:
C:\Users\%USERNAME%\Documents
因此,如果您的 %USERNAME% 是“myname”,您將引用:
C:\Users\myname\Documents
聽起來您正在使用需要 DOS 8.3 檔案名稱的舊 command.com 程式。在這種情況下,您將採用前六個字元並為第一項添加“~1”。如果您有兩個項目共享相同的前六個字符,那麼下一個項目將以“~2”結尾,依此類推。可以肯定的是,您可以執行“dir /x”來查看為每個資料夾分配了哪些短名稱。
在我的最後一個範例中,我將展示這種格式的長用戶名是什麼樣子。範例使用者名稱將為“longusername”。
C:\Users\LONGUS~1\DOCUME~1
使用您自己的用戶名遵循此模式。
如果您的「我的文件」不在預設位置或您想要動態尋找該位置,您將檢查以下註冊表位置:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
答案2
dir /x
將顯示檔案和資料夾的短檔案名稱(如果存在)。如果長名稱大於 8.3 字元格式,則將存在一個。
例如,這是dir /x
在我的使用者設定檔資料夾中使用的範例:
01/02/2018 05:35 PM <DIR> .
01/02/2018 05:35 PM <DIR> ..
10/16/2017 09:41 AM <DIR> ASDM~1 .asdm
11/01/2017 01:01 PM <DIR> GIMP-2~1.8 .gimp-2.8
11/20/2017 05:26 PM <DIR> NETWOR~1 .networkassistant
12/15/2016 09:54 AM <DIR> THUMBN~1 .thumbnails
11/16/2017 09:48 PM <DIR> Contacts
07/17/2017 02:23 PM <DIR> DOCUME~1 Documents
01/03/2018 01:07 PM <DIR> DOWNLO~1 Downloads
03/14/2017 02:43 PM <DIR> GNS3
12/19/2017 01:10 PM <DIR> GOOGLE~1 Google Drive
11/16/2017 09:48 PM <DIR> Links
06/22/2017 07:20 AM <DIR> OneDrive
請注意,短名稱顯示在長名稱旁邊。
另請注意,縮短名稱的標準是刪除空格,將名稱縮短為 6 個字元並添加 ~1,所有字母大寫,添加檔案副檔名的前 3 個字元。如果有衝突,則會加上~2代替,以此類推。
如果我們假設您的文件資料夾保存在D:\My Documents
並且沒有其他衝突的名稱,則短名稱將為D:\MYDOCU~1
.
您可能無法使用 %userprofile% ,原因與無法使用長檔名的原因相同。該程式根本不理解環境變數。而且,它也沒有使用短名稱版本。