60

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

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

10 ответов10

64

Запустите и введите 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
35

Создайте файл 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
8

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

C:\ABCDEF ~ 1 - C:\ABCDEFG Я ЕСТЬ КАТАЛОГ
C:\BCDEFG ~ 1 - C:\BCDEFGHIJKL M Другой каталог

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

C:\ABCDEF ~ 1 - C:\ABCDEFG Я ЕСТЬ КАТАЛОГ
Каталог C:\ABCDEF ~ 2 - C:\ABCDEFGHI

6

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

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

Разбивка:

cmd /c - запускает новый экземпляр интерпретатора команд Windows, выполняет команду, указанную в строке, а затем завершается

for %%parameter in (set) do command - Условно выполнить команду несколько раз.

echo - отображение сообщений на экране. Символ @ совпадает с символом ECHO OFF применяемым только к текущей строке.

%~s - Расширенный путь содержит только короткие имена.

Источники:

3

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

cmd /c for %A in ("%cd%") do @echo %~sA  
2

Я нашел очень удобный способ решить короткий путь к текущему каталогу (или что-то еще), если у вас установлен 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

C:\Users\abcd> subst z: "c:\Program Files (x86)\ Инструменты Microsoft Office365 \ Microsoft Visual Studio 14.0"

C:\Users\abcd> subst Z:: => C:\Program Files (x86)\Microsoft Office365 Tools\Microsoft Visual Studio 14.0 "Это самый простой способ, который я использовал при работе с файлами с пробелами, и он доступен из File Explorer тоже имеет все те же права доступа.

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);
        }
    }
-2

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

%20

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .