batch-file
cmd.exe 프로세서의 버그
수색…
소개
이 항목에서는 프로세서 버그로 인한 오류에 중점을 둡니다. 문제의 원인과 해결책에 초점을 맞출 것입니다.
비고
DEL 파일 확장자 예제에서 X. Liu는 DEL
명령의 파일 확장자가 3 자 미만일 때이 버그가 발생 하지 않음을 확인 합니다.
괄호 혼란
이 웹 사이트에서 OP가 문제를 발견했습니다.
원인
다음 코드 스니 j을 고려하십시오.
if 1==1 (
set /a result = 2*(3+4)
)
언뜻보기에 CMD.exe
가 CMD.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 *.do
는 A.doc
또는 A.docx
삭제하지 않습니다.
해결책
스레드에서 사용자 MicroCompsUnltd는 Powershell
을 사용하여 문제를 해결할 수 있음을 확인했습니다.