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:
评论加载中...
|