![Windows Cmd/Powershell에서 물결표로 완성된 경로를 해결하는 방법](https://rvso.com/image/1654784/Windows%20Cmd%2FPowershell%EC%97%90%EC%84%9C%20%EB%AC%BC%EA%B2%B0%ED%91%9C%EB%A1%9C%20%EC%99%84%EC%84%B1%EB%90%9C%20%EA%B2%BD%EB%A1%9C%EB%A5%BC%20%ED%95%B4%EA%B2%B0%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
일부 응용 프로그램의 제거를 자동화하려고 하는데 그 중 하나가 XtremeTuner입니다. XtremeTuner는 이를 제거하는 데 사용되는 명령을 레지스트리의 HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\XtremeTuner
키 아래에 저장합니다. 내 컴퓨터에는 키의 값이 다음과 같습니다.
C:\PROGRA~2\XTREME~1\XTREME~1\UNWISE.EXE C:\PROGRA~2\XTREME~1\XTREME~1\INSTALL.LOG
처음에는 그것이 잘못된 것이라고 생각했지만 경로는 실제로 작동합니다. 물결표 문자 뒤에 숫자가 오면 탭 확장과 같은 기능을 수행하는 것으로 나타났습니다. 약간 오류가 발생하기 쉽지만 괜찮습니다. 예를 들면 다음과 같습니다.
C:\Program~1
결심하다C:\Program Files
C:\Program~2
결심하다C:\Program Files (x86)
C:\Program~3
결심하다C:\ProgramData
Powershell이 이를 인식하고 있는 것 같지만 모든 소프트웨어가 인식하는 것은 아닙니다(예를 들어 Chocolatey는 경로를 검증하고 경로가 올바르지 않다고 결론을 내립니다).
내 질문:
- 이 메커니즘은 어떻게 호출됩니까? 지금은 "물결표 완성"이라고 부르지만 아마도 다른 이름이 있을 것입니다.
- 이 물결표로 완성된 경로를 일반 경로로 어떻게 해결합니까?
답변1
이 메커니즘은 어떻게 호출됩니까?
그것들은 "8.3 이름"는 16비트 MS-DOS 및 Windows 3.x 소프트웨어와의 호환성을 위해 생성되었으며, 여기서 파일 이름은 정확히 이 크기로 제한되었습니다.
(해당 운영 체제의 파일 액세스 API에는 고정 길이 가정이 내장되어 있으므로 Win16 또는 DOS용으로 작성된 이전 프로그램은 이후 Windows 버전에서 실행하더라도 영구적으로 제한의 영향을 받습니다. 따라서 Windows는 긴 이름에 대한 짧은 별칭을 제공합니다. 사람들이 새로운 Windows 95 컴퓨터에서 이전 프로그램을 계속 실행할 수 있도록 말이죠.)
이전 버전의 WISE 설치 시스템이 실제로 16비트 실행 프로그램을 사용하여 32비트 설치 프로그램을 생성했기 때문에 이 경로가 표시될 수 있습니다(일반적인 "잘못된 . exe 파일").
물결표 문자 뒤에 숫자가 오면 탭 확장과 같은 기능을 수행하는 것으로 나타났습니다. 약간 오류가 발생하기 쉽지만 괜찮습니다.
아니요, 물결표는 실제로는 아닙니다.퍼지는조금도. 대신 동일한 파일이나 폴더문자 그대로 두 이름이 모두 있습니다여기에 할당되었으며 물결표는 Windows가 생성하는 8.3 이름의 실제 일부입니다. (FAT 포맷 디스크를 처리하는 일부 운영 체제는 8.3 이름을 생성하는 것으로 알려져 있습니다.없이물결표.)
따라서 확장은 사용자 공간 이 아닌 파일 시스템 자체에 의해 수행됩니다. FAT 또는 NTFS 드라이버는 동일한 폴더를 동시에 이름이 지정된 폴더로 인식합니다 Program Files
. PROGRA~1
추측이 필요하지 않습니다. 8.3 이름은 항목이 생성되거나 이름이 변경될 때마다 정적으로 할당되며( dir /x
명령 프롬프트에서 현재 8.3 이름을 볼 수 있음) PROGRA~3은 PROGRA~2가 삭제되더라도 항상 PROGRA~3으로 유지됩니다. .
이는 또한 파일 경로가 사용되는 모든 곳에서둘 다전체 이름과 짧은 8.3 이름은 디렉토리 목록에서 숨겨져 있음에도 불구하고 동일하게 허용되어야 합니다. 8.3 이름을 허용하지 않는 프로그램은 대개 잘못된 작업을 수행하고 있는 것입니다.
(NTFS 디스크에서 8.3 이름 생성은 비활성화될 수 있으므로 dir /x
명령에 일부 이름이 누락된 것으로 표시될 수 있습니다. 그러나 8.3 생성을 비활성화해도 이전에 할당된 이름이 무효화되지는 않습니다.)
이 물결표로 완성된 경로를 일반 경로로 어떻게 해결합니까?
Win32 API를 통해 다음을 호출할 수 있습니다.GetLongPathName()또는전체경로이름() 가져오기.
PowerShell을 통해 다음에 액세스 (Get-Item).FullName
하거나 다음을 수행할 수 있습니다 (Get-ChildItem).FullName
.
PS C:\Users\Foo> (get-item -force "c:\users\foo\virtua~1").Name
.VirtualBox
PS C:\Users\Foo> (get-item -force "c:\users\foo\virtua~1").FullName
C:\Users\Foo\.VirtualBox
PS C:\Users\Foo> get-item -force docume~1,micros~1,virtua~1 | ft Name,FullName
Name FullName
---- --------
Documents C:\Users\Foo\Documents
MicrosoftEdgeBackups C:\Users\Foo\MicrosoftEdgeBackups
.VirtualBox C:\Users\Foo\.VirtualBox