Windows에서는 여전히 ~
긴 이름을 가진 파일과 디렉터리를 단축하는 데 사용합니다. dir /X
명령 프롬프트에 입력하면 "짧은" 이름을 볼 수 있습니다 .
내 질문은 짧은 파일 이름에 숫자가 어떻게 할당됩니까? 알파벳순이 아닌 것 같고 파일 생성 시간에 따라 작동하지 않는 것 같습니다.
예를 들어:
새 텍스트 파일을 만듭니다.C:\reallylongfilenameB.txt
그런 다음 실행 dir /X
해 보면 fileB의 짧은 이름이 다음과 같습니다.REALLY~1.TXT
두 번째 텍스트 파일을 만듭니다.C:\reallylongfilenameA.txt
그런 다음 실행하여 dir /X
fileA의 짧은 이름이 다음과 같은 것을 확인합니다.REALLY~2.TXT
그런 다음 시계를 하루 뒤로 설정하고 삭제한 C:\reallylongfilenameA.txt
다음 다시 생성하여 기본적으로 생성 날짜를 C:\reallylongfilenameA.txt
1일 전으로 만듭니다 C:\reallylongfilenameB.txt
.
나는 달리고 dir /X
있으며 C:\reallylongfilenameA.txt
짧은 이름은 여전히 입니다 REALLY~2.TXT
.
C:\reallylongfilenameA.txt
이 예에서 be 라는 짧은 이름을 만들 수 있는 방법이 있습니까 REALLY~1.TXT
?
답변1
내가 이해하는 바에 따르면 NTFS는 생성 시 영구 8.3 파일 이름을 자동으로 할당합니다. dir /X를 실행하면 파일 이름이 즉시 단축되는 것이 아니라 미리 할당된 짧은 이름을 찾는 것입니다.
답변2
Jack이 답변에서 지적했듯이 파일이 생성되거나 이름이 바뀌거나 이동될 때 짧은 이름이 지정됩니다. 값은 긴 파일 이름과 이미 존재하는 다른 짧은 이름에 따라 달라집니다.
정확한 짧은 이름 할당 알고리즘은 문서화되어 있지 않으며 Windows 버전 간에 또는 서로 다른 스토리지 시스템 형식 간에도 알고리즘이 일정하게 유지된다는 보장이 없습니다. 특정 짧은 이름 할당 알고리즘에 의존하는 코드를 작성해서는 안 됩니다.
짧은 파일 이름으로 인해 발생하는 디자인 제한과 버그가 모두 있습니다. 디자인 제한의 예는 짧은 이름의 확장자가 아마도 이고 소스 마스크가 긴 이름과 짧은 이름을 모두 보기 때문에 del *.txt
이름이 지정된 파일을 삭제할 수 있다는 것 입니다. 제목의 섹션을 참조하세요.something.txt2
.txt
"버그 - 짧은 8.3 파일 이름으로 인해 /D 및 /S 옵션이 손상될 수 있습니다."~에Windows FINDSTR 명령의 문서화되지 않은 기능과 제한 사항은 무엇입니까?짧은 이름으로 인해 발생하는 버그의 예입니다.
NTFS 볼륨은 짧은 파일 이름을 비활성화할 수 있습니다(비활성화하기 전에 존재했던 짧은 이름은 그대로 유지됩니다). 많은 사람들(조직)은 발생할 수 있는 문제 때문에 시스템에서 짧은 이름을 비활성화합니다.
업데이트
짧은 파일 이름이 생성되는 방법에 대한 알고리즘을 설정하는 것이 왜 시간 낭비인지에 대한 확실한 주장은 다음과 같습니다.FSUTIL을 사용하면 해당 폴더에 파일이 아직 존재하지 않는 한 파일에 대해 원하는 짧은 이름을 지정할 수 있습니다.
관련 FSUTIL 도움말 문서는 다음과 같습니다.
C:\test>fsutil file
---- FILE Commands Supported ----
findbysid Find a file by security identifier
queryallocranges Query the allocated ranges for a file
setshortname Set the short name for a file
setvaliddata Set the valid data length for a file
setzerodata Set the zero data for a file
createnew Creates a new file of a specified size
queryfileid Queries the file ID of the specified file
queryfilenamebyid Displays a random link name for the file ID
C:\test>fsutil file setshortname /?
Usage : fsutil file setshortname <filename> <shortname>
Eg : fsutil file setshortname C:\testfile.txt testfile