bat 임의의 문자 필터

글 쓴 이:allyesno bat 의 작은 게임 에서 숫자 를 맞 출 때 나 는 이 문 제 를 연구 한 적 이 있다. 어떻게 bat 에서 이 루어 집 니까? 입력 한 임의의 문 자 를 필터 링 합 니 다. 당시 사용 한 몇 가지 방법 은 다음 과 같다.Codz:  if "%1"=="필터 할 문자" echo 당신 이 입력 한 것 은 불법 문자 입 니 다.  예: if "%1"=="wrongpassword" echo 잘못된 구령  set errorlevel=0  echo 필터 할 문자|find "걸 러 낼 문자"  if "%errorlevel%"=="0" echo 당신 이 입력 한 것 은 불법 문자 입 니 다.  if "%errorlevel%"=="1" echo 이 문자열 은 불법 목록 에 없습니다.주로 이 두 가지 방법 을 사용 합 니 다. 이 두 가지 방법 은 숫자 를 걸 러 낼 수 있다. 화해시키다 영문 자모 그러나. 맞다. 특수 문자 효과 가 없 으 면[+|-=\[]{}을 걸 러 야 합 니 다. 】(스페이스 바 와 tab 키 포함)시 우 리 는 이렇게 Codz:  echo "anyword"|find ""anywrod"뭐 가 달라 요? 네,그렇습니다. 우 리 는"anyword"를 포함 하여 가입 했다. 필터 가 완료 되 지 않 았 습 니 다. 위 에서 필터 할 문자 발견 뭐 가 없어 요? 네,그렇습니다. 적다 문자 자체 안 타 깝 게 도 이런 방법 문자 자 체 를 완벽 하 게 걸 러 낼 수 없습니다. 당 하 다 값 을 얻다 기수 화해시키다 짝수의 때. find 로 진행 하 겠 습 니 다. 여과 조건 에 따르다 다 르 면 이 문 제 를 잘못 보고 할 수 있다. 괴롭히다 나 는 반년 동안 일찍이 코크스 위 에 있 었 다 물 어 봤 어 요. 아무 도 대답 하지 않 았 다.  사실 걸 러 야 돼 요. 그리 간단 하지 않다 우 리 는 먼저 비밀 번 호 를 검증 하 는 애플 릿 을 몇 개 썼 다. 서로 다른 상황 에서 프로그램의 반응 을 보 려 면 먼저 인증 암호 로그 인 애플 릿 주 를 작성 합 니 다.암호 인증 문자 가 p4nt0m 일 때 인증 로그 인 Codz:  @echo off  cls  :allyesno  set errorlevel=>nul  echo 로그 인 암 호 를 입력 하 세 요  set/p password=  echo "%password%"|findstr "ph4nt0m"  if "%errorlevel%"=="0" echo 구령 이 맞다 end  echo 구령 오류&goto allyesno  :end  echo 시스템 에 성공 적 으로 로그 인하 여 bat 를 key.bat 로 저장 하여 실행 결과 Codz:  C:test>key  로그 인 암 호 를 입력 하 세 요  test  암호 오류  로그 인 암 호 를 입력 하 세 요  ph4nt0m  "ph4nt0m"  구령 이 정확 하 다  시스템 로그 인 성공 사실 위. 위의 코드 는 일반적인 구령 검증 에 사용 하기에 충분 하 다. 그러나. 우리 의 목적 을 달성 해 야 한다. 임의의 문자 필터 가 아직 안 되 었 습 니 다.실행 결 과 를 바 꿔 보 겠 습 니 다.Codz:  C:test>key  로그 인 암 호 를 입력 하 세 요  test  암호 오류  로그 인 암 호 를 입력 하 세 요  "  """|findstr "ph4nt0m"  암호 오류  로그 인 암 호 를 입력 하 세 요  ph4nt0m  "ph4nt0m"  구령 이 정확 하 다  시스템 에 성공 적 으로 로그 인 했 습 니 다.보 셨 습 니까? 우리 가 입력 하면" 문자 시간 절차 가 잘못 보고 되 었 다 비밀번호 표시 왜 이러 지? 우 리 는 이 문장의 문법 구 조 를 다시 보 았 다. echo "%password%"|findstr "ph4nt0m" %password%="일 때 echo """|findstr "ph4nt0m'이렇게 된 이유 echo 의 특성 과 관계 가 있 습 니 다. 우 리 는 다음 몇 개의 문 구 를 봅 시다.Codz:  I:>echo "|cd  "|cd  I:>echo ""|cd  I:  I:>echo """|cd  """|cd  I:>echo """"|cd  I:홀수 일 때 줄 인쇄 짝수 집행 하 다. | 문자 뒤의 명령 위 프로그램 에서 실 행 된 명령 은 cd 입 니 다. 제 가 echo 대신 set 로 했 어 요. 프로그램 은 다음 과 같 습 니 다 Codz:  @echo off  cls  :allyesno  set errorlevel=>nul  echo 로그 인 암 호 를 입력 하 세 요  set/p password=  set |findstr "ph4nt0m"  if "%errorlevel%"=="0" echo 구령 이 맞다 end  echo 구령 오류&goto allyesno  :end  echo 시스템 에 성공 적 으로 로그 인 한 결 과 는 다음 과 같 습 니 다.Codz:  로그 인 암 호 를 입력 하 세 요  test  암호 오류  로그 인 암 호 를 입력 하 세 요  "  암호 오류  로그 인 암 호 를 입력 하 세 요  ph4nt0m  password=ph4nt0m  구령 이 정확 하 다  시스템 에 성공 적 으로 로그 인 하 였 습 니 다.  C:\test>프로그램 이 완벽 해 졌 지만 문제 가 있 습 니 다 D 우리 다시 보 자. Codz 를 다른 방식 으로 실행 합 니 다:  로그 인 암 호 를 입력 하 세 요  test  암호 오류  로그 인 암 호 를 입력 하 세 요  ph4nt0mallyesno  password=ph4nt0mallyesno  구령 이 정확 하 다  시스템 에 성공 적 으로 로그 인 하 였 습 니 다.  C:test>프로그램의 검증 방식 은? set |findstr "ph4nt0m" 그래서 p4nt0m 문 자 를 포함 하 는 비밀 번호 모두 정확 한 비밀번호 로 여 겨 진다. 그래서 비밀번호 통 과 했 습 니 다.이 문 제 를 피하 기 위해 서. 설 치 했 습 니 다. 일치 하 는 매개 변수\<\> 데 이 터 를 검사 하 다. 수 정 된 프로그램 다음 Codz:  @echo off  cls  :allyesno  set errorlevel=>nul  echo 로그 인 암 호 를 입력 하 세 요  set/p password=  set |findstr "\"  if "%errorlevel%"=="0" echo 구령 이 맞다 end  echo 구령 오류&goto allyesno  :end  echo 시스템 실행 결과 에 성공 적 으로 로그 인 하 였 습 니 다.Codz:  로그 인 암 호 를 입력 하 세 요  test  암호 오류  로그 인 암 호 를 입력 하 세 요  ph4nt0mallyesno  암호 오류  로그 인 암 호 를 입력 하 세 요  ph4nt0m  password=ph4nt0m  구령 이 정확 하 다  시스템 에 성공 적 으로 로그 인 하 였 습 니 다.  C:test>마지막 으로 프로그램 을 손질 하 다 아래 와 같다  Codz:  @echo off  cls  :allyesno  set errorlevel=>nul  echo 로그 인 암 호 를 입력 하 세 요  set/p password=  rem 암호 문자열 에 이 줄 의 모든 문자 가 포함 되 어 있다 면 +|-=[]{};':.../'>~!@\#$%^&*() +|-=[]{};':.../>? 일치 하 는 모드 를 사용 해 야 합 니 다<>  rem 맞 춤 문자 필요  rem 암호 로 쓸 수 없 는 문자 "  set password|findstr "\"  if "%errorlevel%"=="0" echo 구령 이 맞다 end  echo 구령 오류&goto allyesno  :end  set password=>nul  echo 시스템 에 성공 적 으로 로그 인 하 였 습 니 다:암호 문자열 에 문자 가 있 을 때\\ 문 자 를 겹 쳐 써 야 합 니 다\\  예. set password|findstr "\<\\\>" 로그 인 할 때 한 번 만 써 야 돼 요. 문자 암호 문자열 로 사용 할 수 없습니다. 암호 문자열 에 이 줄 의 모든 문자 가 포함 되 어 있다 면 +|-=[]{};':.../'>~!@\#$%^&*() +|-=[]{};':.../>? 일치 하 는 모드 를 사용 해 야 합 니 다\<\>

좋은 웹페이지 즐겨찾기