请输入登录口令
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代替了echo 程序如下
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 你成功登录系统
执行结果如下
Codz:
请输入登录口令
test
口令错误
请输入登录口令
"
口令错误
请输入登录口令
ph4nt0m
password=ph4nt0m
口令正确
你成功登录系统
C:test>
程序进一步的完美了
但是还是有问题D 我们再来看 换一种方式执行
Codz:
请输入登录口令
test
口令错误
请输入登录口令
ph4nt0mallyesno
password=ph4nt0mallyesno
口令正确
你成功登录系统
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 你成功登录系统
执行结果
Codz:
请输入登录口令
test
口令错误
请输入登录口令









