
일반적인(서부) Windows 컴퓨터에 파일이 있습니다.
файл.txt
파일 이름에 ASCII가 아닌 문자가 포함되어 있습니다. .bat 파일에서 다음을 수행하려면 어떻게 해야 합니까?
dir файл.txt
ren файл.txt file.txt
등.?
위의 명령을 파일 mybat.bat
(UTF-8 또는 UTF-16 인코딩 사용)에 넣어보았으나 cmd /u /c mybat.bat
.
참고: 문제는 해당 문자를 배치 파일에 넣는 방법이 아니라 배치 파일이 예상한 대로 작동하도록 만드는 방법입니다(제 예에서는 파일을 나열한 다음 이름을 바꿉니다).
참고: dir > log.txt
명령은 файл.txt 파일을 ????.txt로 표시합니다. 그러나 dir
이 파일은 화면에 файл.txt로 올바르게 표시됩니다.
답변1
주요 문제는 글꼴입니다https://stackoverflow.com/questions/9321419/unicode-utf-8-text-file-gibberish-on-windows-console-trying-to-display-hebrew올바른 글꼴을 사용하면 물음표가 표시되지 않습니다. 따라서 명령 프롬프트에 Courier New를 추가해야 합니다. 그런 다음 해당 문자를 입력하거나 표시/반향할 수 있습니다.
그런 다음 일부 명령에 문제가 있는 것을 발견하면 chcp 65001을 시도하십시오(질문에 대한 답변으로 chcp 65001은 해당 cmd 프롬프트 창에만 영향을 미치므로 안심하십시오). \u7F 이외의 문자에 대해 리디렉션을 수행하려면 chcp 65001이 필요합니다. 예를 들어 dir >asdf
해당 문자로 파일을 작성하는 명령에는 chcp 65001이 필요합니다. 그러나 ren 명령은 65001 없이도 잘 작동합니다.
참고- OP는 이에 대한 수정 사항을 지적합니다. 그의 글꼴은 괜찮았습니다. 하지만 그는 chcp 65001이 필요했습니다.
chcp 65001이 필요한 또 다른 경우는 배치 파일이 utf8에 있는 경우입니다. 그렇지 않으면 привет 와 같은 문자만으로 배치 파일을 실행하더라도 해당 문자는 물음표로 변환됩니다.
OP는 또한 메모장이 BOM이 있는 utf-8로 저장되는 반면 chcp 65001은 BOM이 없는 UTF-8인 문제에 대한 훌륭한 해결 방법을 지적합니다. 그리고 bom을 사용하여 utf-8로 인코딩된 배치 파일이 있는 경우(예: dir 또는 echo привет) cmd의 인코딩이 65001이더라도 작동하지 않습니다. 왜냐하면 cmd는 BOM을 첫 번째 줄에 혼합하기 때문입니다. 따라서 해결 방법은 명령을 두 번째 줄부터 시작하는 것입니다. (또는 BOM 없이 utf-8로 저장하는 텍스트 편집기를 사용할 수도 있습니다).