Windows Server 2012에서 단순 배치 파일이 실패함

Windows Server 2012에서 단순 배치 파일이 실패함

Windows 2012 Server에서 로그인한 관리자(로컬 및 도메인)가 콘솔 입력을 파일로 리디렉션하여 "test.bat" 배치 파일을 생성했습니다.

echo Hello

PowerShell cmd 프롬프트에서 다음과 같이 실행하면 .\test.bat다음이 에코됩니다.

'■e' is not recognized as an internal or external command,

배치 파일은 로그인한 사용자의 C:\users\%username% 디렉터리에 있습니다.

파일은 콘솔에서 생성되었으므로 다음과 같습니다.

echo "echo Hello" > test.bat

그런 다음 메모장으로 편집했습니다. 메모장에서는 괜찮아 보였는데... 특이한 점은 없었습니다.

무슨 일이 일어나고 있는지에 대한 아이디어가 있습니까?

편집됨:

제안에 따라 명령줄 입력을 수정하여 따옴표를 제거했습니다. 따라서 다음과 같이 명령을 입력했습니다. echo echo Yowzer > test.bat Ran as: .\test.bat위와 동일한 응답을 받았습니다. 또한 위의 test.bat(예: cmd 줄에서 생성됨)을 메모장에서 편집하고 다시 실행하면 여전히 가비지 응답이 반환됩니다. 하지만 메모장에서 파일을 생성/저장하면출발점에서,올바르게 작동합니다.

누구든지 이것을 복제할 수 있습니까?

답변1

>리디렉션이 배치 파일을 ASCII여야 하는데 유니코드로 인코딩한 것 같습니다 . Powershell에서는 Out-File리디렉션 대신 다음과 같이 사용하세요.

"echo test" | Out-File test.bat -Encoding ascii

다음 인코딩 후 배치 파일을 실행하면 오류가 재현됩니다.

"echo test" | Out-File test.bat -Encoding unicode

답변2

같은 문제가 있었고 내가 미쳤다고 생각했습니다.

다른 컴퓨터에서 배치 파일을 만드십시오. 메모장을 열고 정상적으로 명령을 입력하는 것과 동일한 문제가 발생했습니다. 그것은 항상 나에게 같은 메시지를 주었다. 내 로컬 Win7 장치에서 배치 파일을 다시 생성한 후(이전 파일을 복사하지 않음) 이를 내 Win 2012R2 서버에 다시 복사하여 챔피언처럼 작동했습니다.

답변3

어딘가에 재미있는 캐릭터가 있을 가능성이 높습니다. xxd -p blah.bat그렇게 하면 배치 파일에서 재미있는 문자를 보게 될 것이라고 확신합니다 .

그런 다음 그들이 어떻게 거기에 도달하고 제거하는지 생각할 수 있습니다. 그리고 그것은 xxd와 sed로 수행될 수 있습니다. 아니면 다른 방법으로, 어떤 캐릭터인지 알고 있다면 가능합니다.

VIM 7.X를 다운로드하거나 cygwin에서 xxd를 얻을 수 있습니다.

또는 16진수 편집기를 찾아 배치 파일을 16진수 편집기에 넣을 수도 있습니다.

stdin에서 배치 파일을 생성한다고 하셨습니다. 글쎄요, 그게 무슨 뜻인지 자세히 설명할 수 있습니다. 예를 들어 copy con blah.batCtrl-Z를 누른다는 뜻인가요? 하지만 무슨 뜻이던 간에, 파일에 재미있는 문자를 넣는 것입니다.

추가됨

에코와 리디렉션을 사용하여 수행했다고 말씀하신 것 같습니다.

일부 문제 해결을 위해 이를 쉽게 단순화할 수 있습니다.

노력하다 type blah.bat

재미있는 문자가 표시되면 echo H>blah.bat입력한 내용에 맞춰 작성해 보세요. 그리고 어느 시점에서 재미있는 문자가 나타나는지 확인하세요.

실험해 볼 또 다른 사항은 입력 및 출력 인코딩입니다.

chcp를 시도해 보세요. chcp 850 및 chcp 65001을 입력하고 차이점이 있는지 확인하세요. chcp는 입력 및 출력 인코딩을 모두 변경하지만 chcp는 입력 인코딩만 표시합니다.

여기 내 대답을 보면https://stackoverflow.com/questions/30904504/font-is-right-why-cant-i-get-this-unicode-character-to-display-in-this-c-sharp/32418703#32418703 제가 얼마 전에 작성한 chcpa라는 프로그램을 보면 이 프로그램을 사용하여 chcp보다 더 유연하게 입력 및 출력 인코딩을 변경할 수 있습니다. 또는 chcp를 사용할 수도 있지만 chcp로 인해 문제 해결이 제한되는 경우 chcpa를 사용해 볼 수 있습니다.

그러나 문제 해결에 있어 가장 좋은 도구 중 하나는 앞서 언급한 16진수 편집기 또는 xxd입니다. 그리고 제안된 대로 라인을 더욱 단순화하려고 노력합니다.

이와 같은 단계는 오류가 발생한 위치를 격리하는 데 도움이 됩니다. 그리고 여기나 그 이상의 것을 시도할 때 댓글을 달아주세요.

답변4

Echo는 따옴표를 사용하지 않습니다. 큰 따옴표를 제거하면 작동합니다.

echo echo hello > test.bat

Echo는 echo와 공백 다음에 문자열을 찾습니다. 따옴표는 문자열을 분리합니다.

자세한 내용에코.

관련 정보