MS-DOS 파일 이름에 사용할 수없는 문자는 무엇입니까?


16

x86-16 어셈블리 언어로 파일 이름 I / O 절차를 작성 중입니다. 키보드에서 8 개의 문자 (긴 파일 이름을 지원할 필요가 없음)를 사용하여 화면 텍스트 입력 필드에 인쇄합니다.

현재 숫자, 대문자 / 소문자, 밑줄 및 하이픈을 허용합니다.

모든 법적 기호를 허용하고 싶지만 금지 된 문자의 공식 목록을 찾을 수 없습니다. 상식은 슬래시가 불법이라고 말하지만 추측해야한다면 플러스 문자가 합법적이라고 말할 것입니다. (편집 : 아닙니다!)

코드에서 자동으로 마침표 및 파일 확장자 추가를 처리하므로 이미 마침표 문자를 무시하고 있습니다.


17
Retrocomputing이 유용 할 수도 있습니다 .
Bob

Windows에서 폴더를 만들고 '?'를 넣으십시오. 이름으로. 툴팁은 금지 된 문자를 알려줍니다. 이것은 당신에게 시작을 제공합니다
:)

Windows에서 허용되는 문자 집합이 훨씬 커서 @Mixxiphoid가 작동하지 않습니다. 예를 들어 +,;[], 공백 a-z은 Windows에서는 허용되지만 DOS는 허용되지 않습니다. 익스플로러가 나에게 "파일 이름은 \ / : * ? " < > |DOS에서 금지 된 문자의 일부인 다음 문자 를 포함 할 수 없습니다"
phuclv

1
@phuclv 그래서 내가 '이것은 당신에게 시작을 준다'라고 말한 이유이며 이것이 왜 대답이 아닌 의견입니다.
Mixxiphoid

왜 모든 MS-DOS 기호입니까? 다른 오래된 OS 규칙도 고려하지 않겠습니까?
jpmc26

답변:


30

간결한 요약을 찾을 수 있습니다 위키 백과 :

DOS 파일 이름의 유효한 문자는 다음과 같습니다.

  • 대문자 AZ
  • 숫자 09
  • 공백 (기본 이름 또는 확장자의 후행 공백은 파일 이름의 일부가 아닌 패딩으로 간주되지만 공백이있는 파일 이름은 DOS 명령 행에서 사용하려면 따옴표로 묶어야하며 DOS 인 경우 명령은 프로그래밍 방식으로 작성되며 DOS 명령을 작성하는 프로그램 내에서 변수로 볼 때 파일 이름을 4 중 따옴표로 묶어야합니다.)
  • ! # $ % & ' ( ) - @ ^ _ ` { } ~
  • 값 128 – 255 (DOS에서 NLS 서비스가 활성화되어 있지만 소문자로 해석되는 일부 문자는 유효하지 않으며 사용할 수 없습니다)

다음 ASCII 문자는 제외됩니다.

  • " * + , / : ; < = > ? \ [ ] | [9]
  • Windows / MS-DOS에는 쉘 이스케이프 문자가 없습니다
  • .에서 제외하고 이름 및 확장명 필드 내에 (U + 002E. 전체 중지). 및 .. 항목 (아래 참조)
  • 소문자 az(FAT12 / FAT16에서 A–Z로 저장 됨)
  • 제어 문자 0–31
  • Value 127 (DEL) [의심스러운 – 토론]

https://ko.wikipedia.org/wiki/8.3_filename#Directory_table

그리고 여기 MS-DOS 6 사용자 가이드가 공식적으로 말한 내용이 있습니다

파일 및 디렉토리 이름 지정

각 드라이브의 루트 디렉토리를 제외한 모든 파일과 디렉토리에는 이름이 있어야합니다. 다음 목록은 파일 및 디렉토리 이름 지정 규칙을 요약 한 것입니다. 파일 및 디렉토리 이름 :

  • 최대 8 자까지 가능합니다. 또한 최대 3 자까지 확장 할 수 있습니다.
  • 대소 문자를 구분하지 않습니다. 입력 할 때 대문자를 사용하는지 소문자를 사용하는지는 중요하지 않습니다.
  • 밑줄 ( _), 캐럿 ( ^), 달러 기호 ( $), 물결표 ( ~), 느낌표 ( !), 숫자 기호 ( #), 퍼센트 기호 는 문자 A-Z, 숫자 0-9 및 특수 문자 만 포함 할 수 있습니다. ( %), 앰퍼샌드 ( &), 하이픈 ( -), 중괄호 ( {}), 부호 ( @), 작은 따옴표 ( `), 아포스트로피 ( ') 및 괄호 (). 다른 특수 문자는 사용할 수 없습니다.
  • 공백, 쉼표, 백 슬래시 또는 마침표를 포함 할 수 없습니다 (이름과 확장자를 구분하는 마침표는 제외).
  • 동일한 디렉토리에있는 다른 파일 또는 서브 디렉토리의 이름과 같을 수 없습니다.

이것은 PC-DOS 7에서 온 것입니다.

파일에 지정한 이름은 다음 기준을 충족해야합니다.

  • 8자를 초과 할 수 없습니다.
  • 문자 A-Z, 숫자 0-9 및 다음 특수 문자로 구성 될 수 있습니다.

    _ underscore            ^  caret
    $ dollar sign           ~  tilde
    ! exclamation point     #  number sign
    % percent sign          &  ampersand
    - hyphen                {} braces
    @ at sign               `  single quote
    ' apostrophe            () parentheses
    

참고 : 다른 특수 문자는 사용할 수 없습니다.

  • 이름은 공백, 쉼표, 백 슬래시 또는 마침표를 포함 할 수 없습니다 (이름과 확장자를 구분하는 마침표 제외).
  • 이름은 CLOCK $, CON, AUX, COM1, COM2, COM3, COM4, ​​LPT1, LPT2, LPT3, LPT4, NUL 및 PRN과 같은 예약 된 파일 이름 중 하나 일 수 없습니다.
  • 디렉토리 내 다른 파일과 이름이 같을 수 없습니다.

사용 설명서-PC DOS 7

이름의 첫 바이트는 0x20 (공백)이 아니어야합니다. 짧은 이름 또는 확장명은 공백으로 채워집니다. 특수 ASCII 문자 0x22 ( "), 0x2a ( *), 0x2b ( +), 0x2c ( ,), 0x2e ( .), 0x2f ( /), 0x3a ( :), 0x3b ( ;), 0x3c ( <), 0x3d ( =), 0x3e ( >), 0x3f ( ?) , 0x5b ( [), 0x5c ( \), 0x5d ( ]), 0x7c ( |)는 허용되지 않습니다.

FAT 파일 시스템

MS-DOS 5.0에 관심이 있으시면 여기 있습니다 .


11
그것은 가치가 유효한 문자를 포함 할 경우에도 특별한 파일 이름이 있음을 지적 할 수있다 CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8,과 LPT9(참조도 허용되지 않습니다 여기에 )
토마스 Schremser

3
@ThomasSchremser "사용하지 마십시오", "사용하지 않음"및 "권장하지 않음"은 "허용되지 않음"과 동일하지 않습니다.
RobIII

1
@RobIII 예. 그러나 "MS-DOS"문서가 아닌 "Windows> 데스크탑"문서에 링크되었습니다. DOS에 대한 위키는 "그들이 내장 된 문자 장치에 의해 점유 될 때 확장자에 관계없이 파일 이름으로 사용할 수 없습니다 DOS에서 예약 된 장치 이름이있다"는 말했다. 즉, DOS 및 일부 Windows 버전에서는 허용되지 않으며 다른 Windows 버전에서는 권장되지 않습니다.
Quantic

`가 작은 따옴표로 지칭된다는 것이 흥미 롭습니다. 나는 항상 백틱이라고 부르며 '(아포스트로피라고 부르는 것)을 작은 따옴표로 들었습니다.
ale10ander

2
@ ale10ander 네, 저를 놀라게했습니다. 나는 많은 사람들이 아포스트로피 (I`m 에서처럼) 나 인용의 시작 부분에 그것을 사용하는 것을 항상 싫어했습니다. 예를 들어 GNU 문서는 항상`like this '를 작성하는데, 이는 나에게 매우 추악하고 읽기
쉽지 않습니다

12

엄밀히 말하면 MS / PC / DR-DOS 응용 프로그램 프로그래머는 운영 체제에이 정보를 요청해야합니다. AX = 0x6505 인 INT 0x21은 FCHAR해당 국가 및 코드 페이지의 소위 NLS 테이블에 대한 포인터를 반환합니다 . 이 표에는 문자 범위와 파일 이름을 종료하는 문자 세트가 나열되어 있습니다.

이론적으로 국가 및 코드 페이지에 따라 다릅니다. 그러나 공식적으로 OS / 2 제어 프로그램 API에 포함되지 않았으며 FreeDOS에 모든 코드 페이지 및 국가에 대해 1 개의 테이블이 있다는 사실은 실제로 는 거의 변하지 않음을 보여줍니다.

추가 자료


10

MS-DOS 3.3 설명서에서 이것을 찾았습니다. 6.22를 실행하고 있지만 여전히 적용됩니다. '+'가 허용되는 것이 잘못되었습니다.

여기에 이미지 설명을 입력하십시오


2
오늘의 매뉴얼은 Wikipedia보다 더 안정적입니다
Stewart

@Stewart 중요한 것은 Wikipedia 자체가 아니라 Wikipedia의 인용문입니다. 의심스러운 경우 \ @Mylifeisabug 기사의 각주와 참조를 확인하십시오. 방금 MS-DOS 6 설명서
phuclv를

3

파일 이름의 유효성을 검사하려는 경우 INT 21H/AH=60H (TRUENAME - CANONICALIZE FILENAME OR PATH)전달 된 파일 이름에 콜론이나 백 슬래시가 없는지 확인한 후 사용할 수 있습니다 (드라이브 문자 및 디렉토리로 처리 될 수 있음).이 함수는 제안 된 파일 이름을 가져와 정규화하려고합니다. 문자를 대문자로 바꾸고 유효하지 않은 문자를 검사하여 드라이브 문자 / 서버 이름과 경로를 추가합니다.

의사 코드에서 :

If !(filename contains {"/", "\", ".", ":"})
    Canonicalize filename (INT 21H/AH=60H)
    If !(CF is set) filename is valid
Filename is not valid
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.