Codz: @echo off cls :allyesno set errorlevel=>nul echo 請輸入登錄口令 set/p password= set |findstr "ph4nt0m" if "%errorlevel%"=="0" echo 口令正確goto end echo 口令錯誤goto allyesno :end echo 你成功登錄系統(tǒng)
Codz: 請輸入登錄口令 test 口令錯誤 請輸入登錄口令 ph4nt0mallyesno password=ph4nt0mallyesno 口令正確 你成功登錄系統(tǒng)
C:test>
由于程序的驗證方式是 set |findstr "ph4nt0m" 所以只要包含ph4nt0m字符的 密碼 都被當成正確密碼 所以密碼ph4nt0mallyesno 也通過了
為了避免這個問題 我設置了 匹配參數\\> 對數據進行檢驗 修改后的程序 如下
Codz: @echo off cls :allyesno set errorlevel=>nul echo 請輸入登錄口令 set/p password= set |findstr "\ph4nt0m\&;" if "%errorlevel%"=="0" echo 口令正確goto end echo 口令錯誤goto allyesno :end echo 你成功登錄系統(tǒng)
Codz: @echo off cls :allyesno set errorlevel=>nul echo 請輸入登錄口令 set/p password= rem 如果密碼字符串包含此行任一字符_+|-=[]{};':,./">~`!@#$%^*()_+|-=[]{};':,./>? 則必須使用匹配模式> rem 需要雙寫的字符 rem 不可以作為密碼的字符 " set password|findstr "\ph4nt0m\&;" if "%errorlevel%"=="0" echo 口令正確goto end echo 口令錯誤goto allyesno :end set password=>nul echo 你成功登錄系統(tǒng)
注:當密碼字符串中有字符\的時候 需要將字符雙寫\\ 例 set password|findstr "\\\\>" 登錄的時候 只需要寫一次\不需要雙寫