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

@endolith /s스위치는 하위 폴더 재귀를 수행합니다
Paul

1
8.3 경로 전체를 어떻게 표시합니까?
endolith

4
@Paul Win10에서는 작동하지 않는 것 같습니다. 어떤 아이디어?
AHungerArtist

3
@AHungerArtist 짧은 파일 이름이 반드시 존재하지는 않습니다. 그들의 창조를 끌 수 있습니다.
Hipponax43

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 명령 프롬프트에는 특히 유닉스 배경이있는 경우 배우고 이해하기 어려운 값의 공백이있는 변수를 처리하기위한 몇 가지 규칙이 있습니다. 넌 할 수있어

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 : \ program files \ what ever \ 중간에 다른 공간 \ 짧은 버전으로
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"를로 바꿀 수 있습니다. 현재 디렉토리에 대한 짧은 이름 얻을
앤드류 Steitz

1
언제 / 왜 필요한 cmd /c가요? 명령 프롬프트 창에있는 경우 명령을 입력하기 만하면 for %A in ("C:\Program Files") do @echo %~sA"실행"대화 상자에 입력하면 결과가 사라지기 전에 읽을 수 있습니다.
Scott

2
잘 했어요; @Scott이 지적했듯이 다음에서 cmd /c실행할 때 필요하지 않습니다 cmd. PowerShell 에서 필요 하지만 다음 '...'이후에도 토큰을 /ccmd /c 'for %f in ("C:\Program Files") do @echo %~sf'
묶어야합니다

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
사실이 아니다. 특히 한국어와 같은 아시아 문자를 사용하는 경우 더 적은 문자가 사용됩니다.
Arafangion

1
내가 한 질문의 요점 인 "뛰어난"경우에 어느 것이 어느 찾는 가정 해 봅시다 -은 "예외"정기적으로 모든 윈도우 64 비트 설치에서 발생으로 특히, 당신이 알아야 할 수있는 위치 중 어느 하나 Program FilesProgram Files (x86)입니다 PROGRA~1어느 하나는 PROGRA~2입니다. Paul 의 답변은 그 문제를 해결합니다.
또는 매퍼

2
같은 문자로 시작하는 파일이 너무 많아서 4 개 ( ...~4) 뒤에 해싱처럼 시작 됩니다 ( 예 : ABxxxx~1x는 16 진수)-읽기가 쉽지 않습니다.
Sirap

2
사용자가 긴 이름을보고 짧은 이름을 논리적으로 알아낼 수 있다고 제안하고 있습니까? 그건 사실이 아니야. 내가 만들면 ABCDEFGH-CAT짧은 이름을 얻습니다 ABCDEF~1. 그런 다음 생성 ABCDEFGH-DOG하면 짧은 이름을 얻습니다 ABCDEF~2. 그런 다음을 삭제 ABCDEFGH-CAT해도 ABCDEFGH-DOG여전히 짧은 이름을 갖습니다 ABCDEF~2. 긴 이름 만보고 말할 방법이 없습니다.
Scott

말했듯이, 짧은 이름은 6 개의 첫 글자 +가 될 필요는 없습니다 ~1. Windows가 짧은 이름을 생성하는 데 사용하는 규칙을 참조하십시오 . 또한을 사용하여 짧은 이름을 수동으로 설정할 수도 fsutil있으므로 두 이름의 관계가 전혀 없을 수도 있습니다. 하드 링크 또는 소프트 링크는 물론
phuclv

4

Powershell이 ​​설치되어 있으면 현재 디렉토리 (또는 다른 것)의 짧은 경로 이름을 해결하는 매우 편리한 방법을 찾았습니다.

현재 디렉토리에서 Powershell 열기

  • cmd windows에서 powershell을 입력하십시오.

  • gui에 폴더가 열려 있으면 폴더의 주소 표시 줄에 cmd.exe 또는 powershell.exe를 직접 입력 할 수 있습니다.

그런 다음 명령을 내리십시오

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

정보 출처 : [ https://gallery.technet.microsoft.com/scriptcenter/Get-ShortName-90a49303]


3

Ivan Schwartz의 답변 과 마찬가지로 "C : \ Program Files"를 %cd%현재 디렉토리로 바꿀 수 있습니다 .

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

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.