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

利用批处理过滤任意字符

  早在写 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 请输出登录口令
  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 "\"
  if "%errorlevel%"=="0" echo 口令精确&goto 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 口令精确&goto end
  echo 口令错误&goto allyesno
  :end
  set password=>nul
  echo 你乐成登录体系
  注:当暗码字符串中有字符\的时候 必要将字符双写\\
  例 set password|findstr "\<\\\>"
  登录的时候 只必要写一次\不必要双写
  " 字符 不行以作为暗码字符串 如果暗码字符串包含此行任一字符_+|-=[]{};':,./">~`!@#$%^&*()_+|-=[]{};':,./<>? 则必需使用立室模式\<\>
 


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

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