Как я могу найти короткий путь к каталогу / файлу Windows?


75

Мне нужно использовать сокращенные пути для приложения, которое я использую. Например мне нужно C:\PROGRA~1\в отличие от C:\Program Files. Программа не может обрабатывать пробелы и не принимает кавычки (например "C:\Program Files").

Если это помогает, я использую Windows 7. Я могу получить доступ к любой версии начиная с XP, если это необходимо.

Ответы:


79

Начните и введите cmdв поле выполнения. Запустите cmd и используйте cdдля доступа к интересующей вас папке:

cd \

затем

dir /x

C:\>dir /x

13/10/2011  09:14 AM    <DIR>          DOCUME~1     Documents and Settings
13/10/2011  09:05 AM    <DIR>          PROGRA~1     Program Files

Таким образом, вы делаете это для каждой подпапки в пути?
эндолит

@endolith /sПереключатель выполняет рекурсию подпапки
Пол

1
Я имею в виду, как вы отображаете весь путь 8,3?
эндолиты

4
@Paul Это не похоже на работу в Win10. Есть идеи?
AHungerArtist

3
@AHungerArtist Короткие имена файлов не обязательно существуют; их создание можно отключить.
Hipponax43

38

Создайте файл bat в некотором удобном каталоге, затем вы можете скопировать + вставить короткий путь из этого пути.

Вы можете просто запускать command.comи продолжать выполнять cdкоманды для своего текущего каталога.

В пакетных сценариях Windows %~s1расширяет параметры пути до коротких имен . Создайте этот пакетный файл:

@ECHO OFF
echo %~s1

Я позвонил своему shortNamePath.cmdи назвал это так:

C:\> shortNamePath "c:\Program Files (x86)\Android\android-sdk"
c:\PROGRA~2\Android\ANDROI~1

Вот версия, которая использует текущий каталог, если не был указан параметр:

@ECHO OFF
if '%1'=='' (%0 .) else echo %~s1

Вызывается без параметров:

C:\Program Files (x86)\Android\android-sdk> shortNamePath
C:\PROGRA~2\Android\ANDROI~1

Использование SETи именованная переменная

Командная строка Windows имеет некоторые соглашения для обработки переменных с пробелами в их значениях, которые довольно трудно выучить и понять, особенно если у вас есть опыт работы с Unix. Ты можешь сделать

SET TESTPATH=c:\Program Files (x86)\Android\android-sdk

( без кавычек ) или

SET "TESTPATH=c:\Program Files (x86)\Android\android-sdk"

(обратите внимание на не интуитивное размещение цитат); тогда

CALL :testargs "%TESTPATH%"

:testargs
echo %~s1
goto :eof

6
Действительно полезно, должно быть отмечено как ответ!
lucaferrario

Спасибо! Это выполнимо с помощью команды SET? как SET AAA = C: \ программные файлы \ что-нибудь \ еще один пробел в середине \ в короткую версию
Li3ro

@ Li3ro Я не мог разобраться в способе установки переменной SET, но я подошел довольно близко, вы можете увидеть его внизу ответа, просто нужно немного исправить. Я не в программировании пакетного сценария, поэтому я не знаю как.
SSpoke

Это не выполнимо таким образом. вам нужен цикл for для этого
Li3ro

Это более полезно, чем принятый ответ
EvilTeach

9

Вот один вкладыш :

cmd /c for %A in ("C:\Program Files") do @echo %~sA

Разбивка :

  • cmd /c - Запускает новый экземпляр интерпретатора команд Windows, выполняет команду, указанную в строке, а затем завершает работу.
  • for %%parameter in (set) do команда - Условно выполнить команду несколько раз.
  • echo- Отображать сообщения на экране. @Символ такой же, как и ECHO OFFдля текущей строки.
  • %~s - Расширенный путь содержит только короткие имена.

Источники :


1
Приятно!!! Вы можете заменить «C: \ Program Files» на. чтобы получить краткое имя для текущего каталога
Эндрю Стейц

1
Когда / зачем вам это нужно cmd /c? Если вы находитесь в окне командной строки, вы можете просто ввести for %A in ("C:\Program Files") do @echo %~sAкоманду, и если вы введете ее в диалоговом окне «Выполнить», результат исчезнет, ​​прежде чем вы сможете ее прочитать.
Скотт

2
Красиво сделано; как указывает @Scott, вам не нужно cmd /cпри запуске из cmd; он вам нужен из PowerShell , но тогда вам также нужно '...'-откратить токены после /c:cmd /c 'for %f in ("C:\Program Files") do @echo %~sf'
mklement0

8

«Короткое имя» на самом деле является старым соглашением об именах в DOS 8.3, поэтому все каталоги будут первыми 6 буквами, после которых ~1предполагается, что существует только одно имя, которое соответствует, например:

C:\ABCDEF~1    - C:\ABCDEFG I AM DIRECTORY
C:\BCDEFG~1    - C:\BCDEFGHIJKL M Another Directory

здесь единственное исключение

C:\ABCDEF~1    - C:\ABCDEFG I AM DIRECTORY
C:\ABCDEF~2    - C:\ABCDEFGHI Directory as well

6
Не правда. Иногда используется меньше символов, особенно если вы используете азиатские символы, такие как корейский.
Арафангион

1
Я полагаю , выяснить , какая из них , которые в «исключительном» случае это точка вопрос - тем более, что «исключение» регулярно происходит в каждой ОС Windows 64 - битной установки, где вам может понадобиться знать , какой один из Program Filesи Program Files (x86)является , PROGRA~1и который один есть PROGRA~2. Ответ Павла решает эту проблему.
ИЛИ Mapper

2
У меня так много файлов, которые начинаются с одних и тех же символов, что после четырех из них ( ...~4) это начиналось с того, что выглядит как хеширование, например, ABxxxx~1где х был шестнадцатеричным - что не очень легко прочитать.
Sirap

2
Вы предлагаете пользователю логически определить короткие имена, посмотрев на длинные имена? Это не правда. Если я создаю ABCDEFGH-CAT, он получает короткое имя ABCDEF~1. Если я потом создаю ABCDEFGH-DOG, оно получит короткое имя ABCDEF~2. Если я затем удалить ABCDEFGH-CAT, ABCDEFGH-DOGвсе еще имеет короткое имя ABCDEF~2. Там нет никакого способа сказать, просто посмотрев на длинные имена.
Скотт

как сказано, короткое имя не должно быть 6 первых букв плюс ~1. Смотрите правило, которое Windows использует для генерации коротких имен . И вы также можете установить короткое имя вручную fsutil, чтобы два имени не имели никакого отношения. Не говоря уже о жестких или мягких ссылках
phuclv

4

Я нашел очень удобный способ для определения короткого пути к текущему каталогу (или к чему-либо еще), если у вас установлен Powershell.

Просто откройте PowerShell в текущем каталоге

  • в cmd окна типа powershell

  • если у вас есть открытая папка в графическом интерфейсе, вы можете ввести cmd.exe или powershell.exe прямо в адресную строку папки.

Тогда дайте команду

(New-Object -ComObject Scripting.FileSystemObject).GetFolder(".").ShortPath

Происхождение информации: [ https://gallery.technet.microsoft.com/scriptcenter/Get-ShortName-90a49303]



0

Кроме того, вы можете использовать этот удивительный маленький инструмент под названием PathCopyCopy

За несколько кликов вы можете получить длинный и короткий путь буквально любой папки из контекстного меню, например:

Щелкните правой кнопкой мыши в папке назначения => Копировать путь => Короткий путь.

Готово. Он будет скопирован в ваш буфер обмена.

предварительный просмотр


0

Я установил узловые модули, работая npm installна шаблоне. При попытке удалить эти папки окна не позволяют нам удалить их, поскольку путь слишком длинный, чтобы его можно было обработать.

После некоторого поверхностного исследования я подумал, что было бы правильно, если бы мой собственный фрагмент кода переименовал папки из корня в лист, чтобы он также выдавал любое исключение нарушения для этой попытки.

Меня устраивает. Ниже приведен код для проекта C #.

    public static int directoryCounterIndex = 0;
    public static void Main(string[] args)
    {
        string dirPath = @"D:\Studies\MeanStack\a\nodem";
        RenameDirectories(dirPath);
    }

    private static void RenameDirectories(string dirPath)
    {
        directoryCounterIndex += 1;
        var newPath = Path.GetDirectoryName(dirPath) + Path.DirectorySeparatorChar + directoryCounterIndex.ToString();
        Directory.Move(dirPath, newPath);
        var subDirectories = Directory.GetDirectories(newPath);
        foreach (var subDirectory in subDirectories)
        {
            RenameDirectories(subDirectory);
        }
    }

3
Пожалуйста, внимательно прочитайте вопрос. Ваш ответ не отвечает на оригинальный вопрос.
DavidPostill

0
C:\Users\abcd>subst z: "c:\Program Files (x86)\Microsoft Office365 Tools\Microsoft Visual Studio 14.0"

C:\Users\abcd>subst
Z:\: => C:\Program Files (x86)\Microsoft Office365 Tools\Microsoft Visual Studio 14.0"

Это самый простой способ, который я использовал при работе с файлами с пробелами, и он доступен из проводника, тоже имеет те же права доступа.


0
@echo off
for %%i in (%*) do echo %%~si
pause

Сохраните его как shortpath.bat, а затем перетащите на него файлы. Его результат:

C:\PROGRA~1
C:\PROGRA~2
C:\PROGRA~3
C:\Python27
C:\Users
C:\Windows
Press any key to continue . . .

Вызов это с shortpath <file path>тоже хорошо.


-2

Просто замените пробелы на

%20

Это способ, которым вещи «переводятся», и пробелы переходят в% 20.

Если вам действительно нужно много, просто откройте браузер и введите что-то вроде

test ";($#< and find the word test, and see that the space is %20 and so on...

Я не думаю, что ты прав. Это не дает положительного результата:if exist C:\Program%20Files\ (echo exists)
kayleeFrye_onDeck

3
Вы говорите о чем-то совершенно ином. Суть в том, что имена каталогов и файлов усекаются до 8 символов. Браузер не имеет к этому никакого отношения.
Давид Ференчи Рогожан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.