́╗┐ '는 내부 또는 외부 명령으로 인식되지 않습니다


25

PsExec을 사용하여 특정 파일 (주로 배치)을 실행할 때 명령 전에 이상한 ́╗┐ '기호가 나타납니다. 내 생각은 잘못된 인코딩을 사용하고 있었지만 확인 후 모든 파일이 UTF-8을 사용하고 있음을 깨달았습니다.


대신 UTF-16LE로 변환하지 않겠습니까?
— 이그나시오 바스케스-아 브람스

차이점이 뭐야?
— miestasmia

차이점은 Windows는 일반적으로 UTF-8을 사용하지 않는다는 것입니다.
— Ignacio Vazquez-Abrams

답변:


32

내 명령 […] 전에 모든 이상한 파일이 UTF-8을 사용하고 있습니다.

여기에는 두 가지 원인이 있습니다.

  1. cmd.exe 는 UTF-8을 지원하지 않습니다. 시스템의 국가 별 설정에 따라 항상 "OEM"이라고하는 단일 바이트 인코딩 중 하나 인 cp437, cp775 등을 사용합니다.

    (UTF-16도 지원할 것으로 예상했지만 UTF-16 BOM을 추가 한 경우에도 그렇지 않습니다.)

  2. 텍스트 편집기가 EF BB BF모든 UTF-8 파일의 시작 부분에 UTF-8 "바이트 순서 표시"(bytes )를 추가하고 있습니다.

    cmd.exe 는 스크립트를 읽을 때 마크로 무엇을해야할지 몰라 BOM을 3 개의 일반 cp437 문자로 인식 ’ ╗ ┐하여 명령 이름의 일부로 사용하려고합니다.

UTF-8 인코딩 파일에 BOM 추가를 중지하도록 편집기를 구성하십시오. (UTF-16에서만 의미가 있으며 UTF-8에서는 매우 쓸모 가 없습니다.)

배치 파일을 exe로 컴파일하면 문제가 해결됩니까?

어

뭐


3
UTF-8에서 BOM이 "매우 쓸모 없다"고 말하지는 않습니다. 그들은이 특별한 경우에 있지만. 많은 응용 프로그램에서 텍스트가 실제로 UTF-8이며 다른 인코딩이 아닌지 확인하는 데 사용합니다.
— Dour High Arch

19

더에 @를 dsolimano의 대답 이 경우, 특별히 사용하는 비주얼 스튜디오를 , 그리고 내 경우에 그건 2013 , 나는 다음을 수행하여 고정 :

  1. Visual Studio를 엽니 다 .
  2. 도구 > 옵션을 클릭하십시오 .
  3. 텍스트 편집기 > 파일 확장자를 클릭하십시오 .
  4. 에서 확장 상자에 입력 방망이 .
  5. 에서 에디터 선택, 드롭 다운 소스 코드 (텍스트) 편집기를 인코딩을 클릭 추가 .
  6. 클릭 OK를 저장하고 종료 할 수 있습니다.

이제 Visual Studio 내에서 .bat 파일 을 열면 처음에 다음과 같은 메시지가 표시됩니다.

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

해당 언어 의 DOS 옵션 이 나올 때까지 옵션을 자세히 살펴보고 싶을 것입니다.

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

파일 열기를 마치 려면 확인 을 클릭하십시오 .


이 시점에서 분명해야하지만 ∩╗┐파일의 시작 부분에 문자 가 표시 되면 올바른 인코딩으로 파일을 제거하고 파일을 저장해야합니다. 다음 번에 다시 프롬프트가 표시되지 않습니다.


대신에이 모든, 당신은 당신이 지금 수 있다는 것을 알고 기뻐합니다 보기 , 편집 및 저장 하여 .BAT 내에서 파일 (들) 비주얼 스튜디오 있도록 cmd.exe를이 더 이상 당신의 전술 가증스러운 오류가 있습니다 :

'∩╗┐' 는 내부 또는 외부 명령, 작동 가능한 프로그램 또는 배치 파일로 인식되지 않습니다.


2
이 수정 프로그램은 완벽하게 너무 VS2017에서 작동
— 그렉 Trevellick에게

1
나는 이것을 추측하지 않았을 것입니다. VS2019에 유효한 솔루션입니다.
— hbulens

10

이것들은 유니 코드 바이트 순서 마크 입니다. Cmd.exe가이를 이해하지 못합니다. ANSI 인코딩으로 메모장에 파일을 다시 저장하면 문제가 해결됩니다.

예를 들어이 배치 파일을 만들었습니다.

echo Hello World

먼저 UTF-8 인코딩으로 저장합니다.

C:\Users\DSolimano\Desktop\junk>test.bat

C:\Users\DSolimano\Desktop\junk>echo Hello World
'echo' is not recognized as an internal or external command,
operable program or batch file.

그런 다음 유니 코드로

C:\Users\DSolimano\Desktop\junk>test.bat

C:\Users\DSolimano\Desktop\junk>■e
'■e' is not recognized as an internal or external command,
operable program or batch file.

그리고 마지막으로 ANSI

C:\Users\DSolimano\Desktop\junk>test.bat

C:\Users\DSolimano\Desktop\junk>echo Hello World
Hello World

4

앞에서 설명한 것처럼이 문자는 서명으로 사용되는 유니 코드 문자 BOM (Byte Order Mark)이며 cmd.exe는 인식하지 못합니다.

여러 가지 방법으로 안전하게 삭제할 수 있습니다.

나는 다음과 같이 매우 쉬운 것을 발견했다.

  1. 메모장 에서 파일 열기 ++
  2. 인코딩 메뉴 로 이동
  3. 옵션을 체크하십시오 : BOM없이 UTF-8로 인코딩
  4. 저장하면됩니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.