神剑山庄资源网 Design By www.hcban.com
文章作者:allyesno
早在写 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 "\<ph4nt0m\>"
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 "\<ph4nt0m\>"
if "%errorlevel%"=="0" echo 口令正确&goto end
echo 口令错误&goto allyesno
:end
set password=>nul
echo 你成功登录系统
注:当密码字符串中有字符\的时候 需要将字符双写\\
例 set password|findstr "\<\\\>"
登录的时候 只需要写一次\不需要双写
" 字符 不可以作为密码字符串 如果密码字符串包含此行任一字符_+|-=[]{};':,./">~`!@#$%^&*()_+|-=[]{};':,./<>? 则必须使用匹配模式\<\>
早在写 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 "\<ph4nt0m\>"
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 "\<ph4nt0m\>"
if "%errorlevel%"=="0" echo 口令正确&goto end
echo 口令错误&goto allyesno
:end
set password=>nul
echo 你成功登录系统
注:当密码字符串中有字符\的时候 需要将字符双写\\
例 set password|findstr "\<\\\>"
登录的时候 只需要写一次\不需要双写
" 字符 不可以作为密码字符串 如果密码字符串包含此行任一字符_+|-=[]{};':,./">~`!@#$%^&*()_+|-=[]{};':,./<>? 则必须使用匹配模式\<\>
标签:
bat过滤任意字符
神剑山庄资源网 Design By www.hcban.com
神剑山庄资源网
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
神剑山庄资源网 Design By www.hcban.com
暂无bat过滤任意字符的评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
2024年11月17日
2024年11月17日
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】