设为主页 | 加入收藏 | 繁體中文

bat过滤任意字符

  by:allyesno   from:http://www.ph4nt0m.org/
  早在写 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对她进行 过滤 随条件 差别大概会报错
  这个题目 困扰了 我半年之久 曾在安焦上 问了一下 没人回答
  究竟上要过滤它 并不是那么的简单 我们先写几个验证密码的小程序 看看在差别环境下程序的反响
  我们先写一个验证密码登录的小程序
  注:当密码验证字符为ph4nt0m的时候 授权登录
  Codz:
  @echo off
  cls
  :allyesno
  set errorlevel=>nul
  echo 请输入登录口令
  set/p password=
  echo "%password%"|findstr "ph4nt0m"
  if "%errorlevel%"=="0" echo 口令精确&goto 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代替了echo 程序如下
  Codz:
  @echo off
  cls
  :allyesno
  set errorlevel=>nul
  echo 请输入登录口令 


    文章作者: 福州军威计算机技术有限公司
    军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。

TAG:
评论加载中...
内容:
评论者: 验证码: