bat过滤任意字符
作者 佚名
来源 批处理
浏览
发布时间 2013-07-09
文章作者:allyesno 早在写bat的一个小游戏猜数字的时候我就研究过这个问题如何在bat里面实现对输入的任意字符进行过滤当时使用的几种方法如下 Codz: if"%1"=="要过滤的字符"echo你输入的是非法字符 例:if"%1"=="wrongpassword"echo错误口令 seterrorlevel=0 echo要过滤的字符|find"要过滤的字符" if"%errorlevel%"=="0"echo你输入的是是非法字符 if"%errorlevel%"=="1"echo该字符串不在非法列表中 主要是使用这两种方法这两种方法可以过滤数字和英文字母但是对特殊字符不起作用 当要过滤【_+|-=\[]{};'':,./">~`!@#$%^&*()_+|-=\[]{};'':,./<>?】(包含空格和tab键值)的时候我们要这样 Codz: echo"anyword"|find"anywrod" 注意到有什么不同了吗是的我们加入了""来包含anyword可是过滤到此并没完成发现上面要过滤的字符少了什么吗是的少了"字符本身遗憾的是这种方法无法完美的过滤"字符本身当"取值为奇数和偶数的时候用find对她进行过滤随条件不同可能会报错 这个问题困扰了我半年之久曾在安焦上问了一下没人回答 事实上要过滤它并不是那么的简单我们先写几个验证密码的小程序看看在不同情况下程序的反应 我们先写一个验证密码登录的小程序 注:当密码验证字符为ph4nt0m的时候授权登录 Codz: @echooff cls :allyesno seterrorlevel=>nul echo请输入登录口令 set/ppassword= echo"%password%"|findstr"ph4nt0m" if"%errorlevel%"=="0"echo口令正确&gotoend echo口令错误&gotoallyesno :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代替了echo程序如下 Codz: @echooff cls :allyesno seterrorlevel=>nul echo请输入登录口令 set/ppassword= set|findstr"ph4nt0m" if"%errorlevel%"=="0"echo口令正确&gotoend echo口令错误&gotoallyesno :end echo你成功登录系统 执行结果如下 Codz: 请输入登录口令 test 口令错误 请输入登录口令 " 口令错误 请输入登录口令 ph4nt0m password=ph4nt0m 口令正确 你成功登录系统 C:\test> 程序进一步的完美了 但是还是有问题D我们再来看换一种方式执行 Codz: 请输入登录口令 test 口令错误 请输入登录口令 ph4nt0mallyesno password=ph4nt0mallyesno 口令正确 你成功登录系统 C:test> 由于程序的验证方式是set|findstr"ph4nt0m"所以只要包含ph4nt0m字符的密码都被当成正确密码所以密码ph4nt0mallyesno也通过了 为了避免这个问题我设置了匹配参数\<\>对数据进行检验修改后的程序如下 Codz: @echooff cls :allyesno seterrorlevel=>nul echo请输入登录口令 set/ppassword= set|findstr"\<ph4nt0m\>" if"%errorlevel%"=="0"echo口令正确&gotoend echo口令错误&gotoallyesno |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 诺顿 Ghost 参数四则下一篇: Prompt、Restore命令使用说明
关于bat过滤任意字符的所有评论