У меня есть программа, которой нужен доступ к компилятору 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
Похоже, вы используете старую программу command.com, которой нужны имена файлов DOS 8.3. В этом случае вы бы взяли первые шесть символов и добавили "~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% по той же причине, по которой вы не можете использовать длинные имена файлов. Программа просто не понимает переменные окружения. И она также не использует версию с коротким именем.