수색…


소개

이 항목에서는 프로세서 버그로 인한 오류에 중점을 둡니다. 문제의 원인과 해결책에 초점을 맞출 것입니다.

비고

DEL 파일 확장자 예제에서 X. Liu는 DEL 명령의 파일 확장자가 3 자 미만일 때이 버그가 발생 하지 않음을 확인 합니다.

괄호 혼란

웹 사이트에서 OP가 문제를 발견했습니다.


원인

다음 코드 스니 j을 고려하십시오.

if 1==1 (
    set /a result = 2*(3+4)
)

언뜻보기에 CMD.exeCMD.exe 과 같이 처리 할 것이라고 생각할 수 있습니다.

  • 조건이 true이면 코드 블록을 실행합니다.
  • 변수 결과 값을 14 설정하십시오.
  • 잇다

그러나 CMD.exe 프로세스는 CMD.exe 과 같습니다.

  • 조건이 true이면 코드 블록을 실행합니다.
  • 계산 2*(3+4) 4시 이후의 끝에서 처리 될 if 코드 블록
  • 무작위 ) 가 등장했습니다!

두 번째 단계는 Unbalanced parentheses 오류를 반환합니다.


해결책

독일 CMD.exe의 set /? 에 따르면 set /? 우리는 산술 연산을 인용해야합니다. 여기에 예제가 있습니다.

너무 이른 결과
set /a result=2+5*4 set /a result="2+5*4"

그건 그렇고, 영어 CMD.exe set /? 에 따라 set /? 논리 연산자 또는 모듈러스 연산자가 표현식에 있으면 따옴표가 필요합니다 ( 반드시 수행해야하는 단계는 아니지만).

부적절한 이스케이프 문자

이 스택 오버플로 질문 에서 사용자 txtechhelp가 보안 문제를 일으킬 수있는 ^ 문자에 문제가 있음을 발견했습니다.


원인

anyInvaildCommand ^

참고 : 캐럿 ( ^ )이 마지막 문자인지 확인하십시오! 여분의 CR\LF 는 전혀 작동하지 않습니다!

캐럿은 이스케이프 할 다음 문자를 찾습니다. 그러나 이스케이프 할 문자는 더 이상 사용할 수 없기 때문에 cmd 가 무한 루프되어 이스케이프 할 문자를 찾습니다. 이 "루프"프로세스에서 cmd.exe 는 컴퓨터 메모리를 소비합니다. 그리고 서서히 모든 기억을 섭취하고 컴퓨터를 무릎에 가져 오십시오.

이 문제는 잠금 해제 된 컴퓨터에 코드를 입력하기 만하면 더 심각한 보안 문제로 이어질 수 있습니다.

솔루션

  • 코드 페이지 UTF-16을 사용하면이 문제를 해결할 수 있습니다. UTF-8 또는 ASCII 만이 버그를 일으킬 수 있습니다.

  • 파일에 추가 CR\LF 가 있는지 확인하거나 파일 끝에 캐럿을 사용하지 마십시오.

특별한

이 버그는 Windows 10에서 해결 된 것으로 보입니다.

델 파일 확장자

이 버그는이 Microsoft Windows 포럼 스레드 에서 steve2916에 의해보고되었습니다 .


원인

이러한 파일이있는 폴더를 고려하십시오.

TestA.doc
TestB.doc
TestC.docx
TestD.docx

이 디렉토리에서 모든 .doc 파일을 제거하려면 일반적으로 다음을 수행합니다.

del *.doc

그러나이 명령은 .docx 파일도 제거합니다. 이 패턴을 가진 파일 확장자에서도 마찬가지입니다.

파일 A 파일 B
어떤 이름. 알파벳 AnotherName. abc d

알 수 있듯이 파일 확장자 문자열에 del 명령에 사용 된 문자열이 포함되어 있으면 해당 파일이 삭제됩니다. 이 버그는 del 명령에 사용 된 확장 문자열에 적어도 세 문자가있는 경우에만 발생합니다. 예를 들어, del *.doA.doc 또는 A.docx 삭제하지 않습니다.

해결책

스레드에서 사용자 MicroCompsUnltd는 Powershell 을 사용하여 문제를 해결할 수 있음을 확인했습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow