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


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.