2011-10-19 00:35:44 +0000 2011-10-19 00:35:44 +0000
83
83

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

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

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

Ответы (12)

84
84
84
2011-10-19 00:51:45 +0000

Начните, и введите 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
```.
42
42
42
2014-03-13 23:11:39 +0000

Создайте 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 фон.   You can do

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

(с кавычками no), или

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

(обратите внимание на неинтуитивное размещение кавычек); then

CALL :testargs "%TESTPATH%"
        ︙

:testargs
echo %~s1
goto :eof
13
13
13
2017-05-22 06:42:16 +0000

Один лайнер :

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

Брейкдаун :

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

Источники :

9
9
9
2011-10-19 01:02:20 +0000

Короткое имя" на самом деле старое 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
7
7
7
2018-05-12 11:16:06 +0000

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

Просто откройте Powerhell в текущем dir

  • в cmd windows введите powershell

  • если у вас открыта папка в gui, вы можете ввести cmd.exe или powershell.exe непосредственно в адресную строку папки.

Затем дайте команду

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

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

4
4
4
2018-05-12 15:31:59 +0000

Подобно Ивану Шварцу ответ , вы можете заменить “C:\Program Файлы” на %cd%, чтобы получить текущий dir:

cmd /c for %A in ("%cd%") do @echo %~sA
```.
0
0
0
2017-06-23 17:15:55 +0000

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

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

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

Готово. Будет скопировано в буфер обмена. (https://i.stack.imgur.com/N3TbT.png) [ предварительный просмотр ]&003

0
0
0
2019-11-03 14:38:08 +0000
@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> тоже нормальный.

0
0
0
2017-12-02 17:57:42 +0000
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
0
0
2020-01-26 22:04:35 +0000

** для пользователей windows 10 НЕТ из этих решений работало на моем ноутбуке windows 10, так как ключ в реестре запрещал создание коротких имен…

  • Alt+r, наберите regedit, чтобы открыть редактор реестра
  • перейдите по адресу HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
  • ищите ключ NtfsDisable8dot3NameCreation : если значение 0x00000001(1), то ваша система не создает короткое имя для вашей папки/файла
  • в этом случае дважды щелкните по ключу NtfsDisable8dot3NameCreation,
  • введите 0 в поле данных

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

-1
-1
-1
2016-11-06 10:51:58 +0000

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

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

Это работает на меня. Ниже приведен код для проекта на 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);
        }
    }
```.
-2
-2
-2
2016-02-10 15:18:55 +0000

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

%20

Это то, как вещи “переводятся”, и пробелы идут в %20.

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

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

Похожие вопросы

3
28
13
7
12