Як я можу знайти короткий шлях каталогу / файлу Windows?


73

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

Якщо це допомагає, я використовую Windows 7. Я можу отримати доступ до будь-якої версії з XP, якщо потрібно.

Відповіді:


77

Почніть та введіть 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 Короткі назви файлів не обов'язково існують; їх створення можна відключити.
Гіппонакс43

37

Створіть файл 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

8

Ось один вкладиш :

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" на. щоб отримати коротке ім’я для поточного каталогу
Andrew Steitz

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де x був шістнадцятковим - що не дуже легко читати.
Сірап

2
Ви припускаєте, що користувач може логічно визначити короткі імена, переглянувши довгі імена? Це не правда. Якщо я створюю ABCDEFGH-CAT, він отримує коротку назву ABCDEF~1. Якщо я тоді створюю ABCDEFGH-DOG, він отримує коротку назву ABCDEF~2. Якщо я потім видалити ABCDEFGH-CAT, ABCDEFGH-DOGвсе ще має коротку назву ABCDEF~2. Немає способу сказати лише дивлячись на довгі назви.
Скотт

як сказано, коротке ім'я не повинно бути 6-ти першими літерами ~1. Дивіться правило, яке Windows використовує для генерації коротких імен . Ви також можете встановити коротке ім'я вручну fsutil, тому ці два імені можуть не мати жодного відношення. Не кажучи вже про жорсткі або м'які посилання
phuclv

4

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

Просто відкрийте панель повноважень у поточному режимі

  • у cmd windows введіть powerhell

  • якщо у вас відкрита папка у gui, ви можете ввести 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на панелі котла. Намагаючись видалити ці папки, 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);
        }
    }

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"

Це найпростіший спосіб, який я використовував при роботі з файлами з пробілами, і це також доступно у провідника файлів, і він має однакові права доступу.


-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 символів. Браузер нічого спільного з цим не має.
Dawid Ferenczy Rogožan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.