我有一个程序需要访问我安装在“我的文档”文件夹中的 c++ 编译器 - 例如 d:\My Documents
dir /x
程序无法处理路径中的空格,并且路径已用双引号引起来。我尝试使用和找出简称for %I in (.) do echo %~sI
。这只会返回 My Documents 的全名。我也尝试过,%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% 的原因可能与您无法使用长文件名的原因相同。该程序根本不理解环境变量。而且,它也不使用短名称版本。